Gurobi线性表达式与常数的乘法

时间:2018-02-25 19:59:23

标签: python gurobi

如何将线性表达式与常数相乘?我编写了代码但总是返回import AccountManager from 'react-native-account-manager'; AccountManager.getAccountsByType('accountName').then((accounts) => { // console.log('available accounts', accounts); let [firstAccount] = accounts; AccountManager.getUserData(firstAccount, 'storedKey').then((storedData) => { // console.log('stored data for storeKey', storedData); AccountManager.setUserData(account, 'storedKey', JSON.stringify({foo: "bar"})).then(() => { // console.log('data successfully stored'); }) }); })

需要帮助将常数乘以线性表达式。

0.0

1 个答案:

答案 0 :(得分:1)

TL; DR-这不是gurobi的使用方式,请参见底部的代码示例

我们首先来看一些代码行-

Vars["y_" + str(t)] = model.addVar(vtype=GRB.BINARY,name="y_" + str(t))

model.addVar方法添加了一个名为y_1的新变量,您将该变量存储在字典Vars中。

lhs = Vars["y_" + str(t)]

这将创建一个新的(python)变量lhs,并将其指向您在(y_0)之前创建的gurobi变量。请注意,由于您尚未调用model.update(),因此此时y_1不能在任何表达式中使用。

lhs = LinExpr()

我假设您想创建线性表达式1*y_1 + 0,但此行不做。

LinExpr()创建一个新的 empty 线性表达式,等效于0*y_1 + 0。那是因为您没有向LinExpr对象的构造函数(构造函数here的文档)提供任何参数,所以gurobi不知道您想要的哪个表达式,并且默认为零。

相反,您可以调用LinExp(lhs),这将创建您想要的表达式。然后,您可以通过键入lhs = 2 * lhs将其乘以2,甚至可以直接使用LinExp([2], [Vars["y_" + str(t)]])创建结束表达式-这里的第一个参数是系数列表,第二个参数是gurobi变量列表。

但是,gurobi具有用于创建表达式的非常方便的语法(使用operator overloading),因此通常您不应该自己显式调用LinExpr的构造函数,而应直接在数学表达式中使用gurobi变量。

这是一个简单的工作代码-

from gurobipy import Model
model = Model()
var = model.addVar(name="x")
model.update()
print 2 * var

哪些印刷品

<gurobi.LinExpr: 2.0 x>