Я предполагаю, что - в вашем примере - вы хотите установить цель, чтобы минимизировать x[0]^2 + y[0]^2
.Если вам нужна другая цель, адаптировать ее должно быть просто.
Существуют различные способы установки цели.
Вы можете определить ее непосредственно внутри setObjective
:
model.setObjective(x[0] * x[0] + y[0] * y[0])
или
model.setObjective(x[0] * x[0] + y[0] * y[0], gbPy.GRB.MINIZE) # minimize is the default; so it is optional
Это самое простое, и если ваше объективное выражение очень длинное и громоздкое, я бы порекомендовал это.
Или вы можете сначала создать выражение,Это может дать преимущество в производительности, если у вас много терминов.
# define the quadratic expression object
objExp = gbPy.QuadExpr()
# add single terms using add
objExp.add(x[0] * x[0])
objExp.add(y[0] * y[0])
# you could also do this in one line adding x[0]*x[0] + y[0]*y[0]
# or add multiple terms at once using addTerms
#objExp.addTerms([1, 1], [x[0], y[0]], [x[0], y[0]])
# set the objective
model.setObjective(objExp, gbPy.GRB.MINIMIZE)
Обратите внимание, что в этом примере обе части с add
и addTerms
делают то же самое.Вам понадобится только один.
Метод add
добавляет выражение в первый аргумент, умноженный на (необязательный) второй аргумент.Пример, который вы цитируете, сначала определяет выражение x^2 + y^2
, затем добавляет 3z^2
.