pythonのmatpoltlibを用いて、図形の詰め込み問題を解こうとしております。
2次元の詰め込みで、指定したグラフの中に、高さHが最も低くなるように円を下から詰め込みたいと考えております。
下記の文献を参考に取り組んでおります。
http://www.orsj.or.jp/archive2/or63-12/or63_12_762.pdf
TypeError: only size-1 arrays can be converted to Python scalars The above exception was the direct cause of the following exception:
該当のソースコード
python
1from pulp import * 2m = LpProblem(sense=LpMinimize) 3import matplotlib.pyplot as plt 4 5#n:並べたい円の数,r:半径,W:横幅,UB高さ 6n=5 7r=0.17 8W=2.2 9UB=2.6 10 11x=[LpVariable("x%d" %i, lowBound=0) for i in range(n)] 12y=[LpVariable("y%d" %i, lowBound=0) for i in range(n)] 13 14u=[[LpVariable("u%d%d" %(i,j),cat=LpBinary) for j in range(n)] for i in range(n)] 15v=[[LpVariable("v%d%d" %(i,j),cat=LpBinary) for j in range(n)] for i in range(n)] 16 17H=LpVariable("H") 18 19#モデルプロジェクトm 20m += H 21for i in range(n): 22 for j in range(n): 23 m += x[i]+r <= x[j]+W*(1-u[i][j]) 24 m += y[i]+r <= y[j]+UB*(1-v[i][j]) 25 if i < j: 26 m += u[i][j]+u[j][i]+v[i][j]+v[j][i] >= 1 27 28for i in range(n): 29 m += x[i] <= W-r 30 m += y[i] <= H-r 31 32#描写 33fig = plt.figure() 34ax = fig.add_subplot(111,aspect='equal') 35ax.set_xlim([0,W]) 36ax.set_ylim([0,UB]) 37 38center,r = (x,y),r 39circ = plt.Circle(center,r,fc="lightgray",ec="black") 40ax.add_patch(circ) 41 42#グラフのタイトル 43plt.title("Sectional View") 44 45#x軸ラベル 46plt.xlabel("Hole diameter") 47 48#y軸ラベル 49plt.ylabel("depth") 50 51fig.savefig("test1.png")
試したこと
初心者でよくわからなかったので、defで標記したり、モジュールを追加したりしましたが、解決できませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/23 07:10
2021/03/23 07:55