0
我正在使用Python和Gurobi,並且在如何優化查詢字典的可變解決方案方面存在困難。Gurobi和Python:如何使用最優變量解決方案查詢字典
my_dict = {(i, j) : func(Z) for i in I for j in J}
my_dict結果是這樣的:
{(15687, 'B'): [[7, 0, 0, 0], [0, 7, 0, 0], [0, 0, 7, 0], [0, 0, 0, 7]],
...
(18906, 'C'): [[4, 0, 0, 3], [3, 0, 0, 3], [4, 0, 0, 0], [3, 0, 0, 0]}
此外我有一個二進制變量x [I,J,Z]和分配約束:
assignment = m.addConstrs((quicksum(x[i, j, z]
for z in range(len(my_dict[i, j]))) == 1
for i in I for j in J), "assignment")
假設我獲得作爲最佳解決方案變量
x[15687,'B',0] 1.000000
x[18906,'C',2] 1.000000
有沒有辦法檢索my_dict對應於「z」索引的子列表? (例如,如果我的解決辦法是x[18906,'C',2] 1.000000
則z = 2,我想獲得的子表[4, 0, 0, 0]
)
謝謝你的答案,但如果可能,我想避免使用numpy。我對python很陌生,在理解你的解決方案時遇到了問題。此外Gurobi不支持Python 3,所以我使用Python 2.7 – Zeno
(1)np只是爲了保存fp數學。你可以自己做。非最佳(但工作)版本:'''eps = 1e-3; if(abs(x-1.0)<= eps)'''。原因是,你可能想把0.9999當作1,你絕對不應該在花車上進行天真的平等檢查。 (2)Gurobi支持python 3! (3)py2和py3之間的區別僅僅是字典 – sascha
謝謝@sascha,但不幸的是你的解決方案不起作用。我不知道我是否犯了一些使用它的錯誤,但我得到TypeError:只能連接元組(不是「int」)到元組 – Zeno