如何getVar兆乏的年代?
回答你好,我是在python中使用gurobi来解决优化问题。
我有两个数组变量、val1和val2初始化如下:
val1 = m。addMVar (n,磅= 0.0,乌兰巴托=伽马线暴。无穷,vtype =伽马线暴。连续的,name = ' val1 ')
val2 = m.addMVar ((n, m)磅= 0.0,乌兰巴托=伽马线暴。无穷,vtype =伽马线暴。连续的,name = ' val2 ')
优化后,我第一次尝试检索val1和val2的值是:
res1 = m.getVarByName (val1的)方式
它= m.getVarByNamw (val2)方式
但是我得到了错误:
“NoneType对象没有属性x’”。
事实上,res1 NoneType和它的类型。
知道如何区分出来吗?
0
-
嗨Viviana,
的getVarByName方法只返回一个变量的变量名完全符合模型变量。这意味着它是不够的一个变量只有一个字符串\ (\ texttt {val1的}\)。
当您创建的变量时,您可以看到,变量名通过矩阵的维度变量扩展。
N = 2
M = 3
val1 = m。addMVar (N,磅= 0.0,乌兰巴托=伽马线暴。无穷,vtype =伽马线暴。连续的,name = ' val1 ')
val2 = m.addMVar ((N, M)磅= 0.0,乌兰巴托=伽马线暴。无穷,vtype =伽马线暴。连续的,name = ' val2 ')
m.update ()
打印(val1)
打印(val2)
= = = = = = = = = = = = = = = = = = = = = = =
> <兆乏(2)>
> ([< gurobi数组。Var val1 [0] >、< gurobi。Var val1 [1] >)
> <兆乏(2、3)>
> ([[< gurobi数组。Var val2 (0,0) >, < gurobi。Var val2 [0, 1] >,
< gurobi。Var val2 (0, 2) >),
(< gurobi。Var val2 (1,0) >, < gurobi。Var val2 [1] >,
< gurobi。Var val2 [1, 2] >]])获得所有这些变量的名字你现在还必须提供的指标各自的变量名称的一部分
res1 = {}
它= {}
因为我在范围(N):
res1[我]= m.getVarByName (val1 (% d)的%(我)方式
j的范围(米):
它(i, j) = m.getVarByName (“val2 [% d % d] ' % (i, j))方式如果你还有访问\ \ texttt {val1, val2} \)对象优化完成后,你可以使用这些兆乏对象访问的值。
m.optimize ()
如果m。SolCount > 0: #避免属性错误如果没有可行点
res1 = val1.X
它= val2.X从一个方面说明,您使用\ (\ texttt {m} \)为模型对象和作为一个索引添加兆乏时
val2 =米.addMVar (n,米),…)
这可能导致任何类型的问题,应该被避免。
请注意,有一个你pcoming研讨会在矩阵友好的API我们将讨论所有改变和改善矩阵API。
最好的问候,
Jaromił0
请登录留下你的评论。
评论
1评论