前提・実現したいこと
過去にいくつかの質問があるようですが、解決までに至りません。
やりたいことは、以下の図9です。
http://www.orsj.or.jp/archive2/or63-12/or63_12_762.pdf
そのための前哨戦として以下の最適化問題をやろうとしています。線形ではなく、非線形でないと,,,,という話もありますが、
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
from
1m = LpProblem(sense=LpMinimize) 2import matplotlib.pyplot as plt 3import numpy as np 4 5#n:並べたい円の数,r:半径,W:横幅,UB高さ 6n=15 7r=0.2 8W=2.2 9UB=2.6 10 11x=[LpVariable('x%d' %i, lowBound=0) for i in range(n)] 12y=[LpVariable('y%d' %j, lowBound=0) for j 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*2 <= x[j]+W*(1-u[i][j]) 24 m += y[i]+r*2 <= 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*2 30 m += y[i] <= H-r*2 31 m += r <= x[i] 32 m += r <= y[i] 33 34m.solve() 35 36# 37#for i in range(n): 38# print("x[i] value:", x[i].value()) 39# print("y[i] value:", y[i].value()) 40 41 42#描写 43fig = plt.figure() 44ax = fig.add_subplot(111,aspect='equal') 45ax.set_xlim([0,W]) 46ax.set_ylim([0,UB]) 47 48for i in range(n): 49 circle_n = plt.Circle((x[i].value(),y[i].value()),r) 50 ax.add_patch(circle_n) 51 52#グラフのタイトル 53plt.title("Sectional View") 54 55#x軸ラベル 56plt.xlabel("Hole diameter") 57 58#y軸ラベル 59plt.ylabel("depth") 60 61fig.savefig("test1.png") 62コード
試したこと
円の作画は中心点の設定、長方形のゼロ点は左下であるので、r*2で半径ではなく直径で円が重ならないようにしています。
この結果は、以下のようになります。ところが、n=15とするとプログラムが終了しません。5列3段になると思っているのですが(最終的には半径の異なる円を最適に詰め込みたいのですが)。
このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
回答1件
あなたの回答
tips
プレビュー