83595


pythonのgurobiにおいて,

[code]

    g={(1,1):1,(1,2):1,(1,3):1,(1,4):1,
       (2,1):1,(2,2):1,(2,3):1,(2,4):1,
       (3,1):1,(3,2):1,(3,3):1,(3,4):1,
       (4,1):1,(4,2):1,(4,3):1,(4,4):1,
       (5,1):1,(5,2):1,(5,3):1,(5,4):1,
      }
    
    P,G=multidict({1:[1,2,3,4],2:[1,2,3,4],3:[1,2,3,4],4:[1,2,3,4],5:[1,2,3,4]})
    W,H=multidict({1:[1,2,3,4,5],2:[1,2,3,4,5],3:[1,2,3,4,5],4:[1,2,3,4,5]})
    
[/code]

g(i,j)の行列の1の時を, G_iとして,iごとに,行列に格納し, H_jとして, jごとに格納しようとしました.  
するとエラーメッセージで,

[code]

    too many values to unpack (expected 2)
    
[/code]

P,GとW,Hをどう変更すればよいのかわかりません.  
教えてください.


CC BY-SA 4.0
2021-11-12T11:03:56.723
83585
2021-11-13T02:03:12.890
48372
question
python3 データ構造 情報理論
pythonにおけるデータ型のエラー


(解決してるようなので, 回答として記しておきます)

質問の「g(i,j)の行列の」の文がよくわかりません。が,
[`gurobipy.multidict()`](https://www.gurobi.com/documentation/9.1/refman/py_multidict.html)
では, キーとそれぞれの内容の項目が分解されるようです  
なので, 1つ目の multidict指定の行は keyと 4項目で 5つ分, 2つ目の行は 6つ分になり, 左辺の項目が足りません。

  * もしも `G` にすべての辞書を取り込むのなら `*G` と指定すれば OK
  * `G_1`, `G_2` … と指定したいなら, `G_4`まで, `H`は `H_5`まで記すと良いでしょう

* * *

値を取り出す場合:  
`*H` として 5つ分の辞書を取り込んだなら, `H`は listであり, 次のように指定すると一つずつ辞書を取り出せます

[code]

    for d in H:
        print(d)
    
[/code]

辞書の値を取り出すならこんな感じ

[code]

    for j in W:
        print([d[j] for d in H])
    
[/code]


CC BY-SA 4.0
2021-11-13T01:55:56.640
83595
2021-11-13T02:03:12.890
2021-11-13T02:03:12.890
43025
43025
83585
answer