Я столкнулся с проблемами с квадратичными объектными условиями. Я составил очень простой код, чтобы проиллюстрировать мое намерение.Квадратичный объектный член в интерфейсе Gurobi Python
Код объяснения: мы хотим дать конфеты девушке. Радость девушки за получение 1 конфеты (joy_per_candy
) зависит от общего количества конфет, которые она получает. Чем больше конфет мы даем ей, тем меньше ее joy_per_candy
. Цель состоит в том, чтобы максимально увеличить ее общую радость, которая является квадратичным членом:
total_joy = candies * joy_per_candy
В случае ниже 1 конфеты производит joy_per_candy из 10; 10 конфет производят joy_per_candy
из 0. Вот joy curve. Простая математика показывает, что total_joy
максимизируется для candies = 5
.
Как я могу это решить?
joy_curve = [(1,10),(10,0)]
m = Model('candy')
candies=m.addVar(ub=joy_curve[1][0])
joy_per_candy=m.addVar(ub=joy_curve[0][1])
m.update()
total_joy=QuadExpr(candies*joy_per_candy)
m.setObjective(total_joy,GRB.MAXIMIZE)
m.optimize()
результаты:
Оптимизировать модель с 0 строк, 2 столбцов и 0 ненулевые.
Модель имеет 1 квадратичную объективный термин
диапазон Матрица [0e + 00, 0e + 00]
Цель Диапазон [0e + 00, 0e + 00]
границы диапазона [3e + 00 , 1e + 01]
РИТ диапазон [0e + 00, 0e + 00]
Presolve время:
0,00 сGurobiError