前提・実現したいこと
pythonのmatpoltlibを用いて、容器の中に円をしたから詰め込み、高さが最も低くなるように詰め込んでいきたいと考えております。
プログラムはエラーが起こらずにコンパイルできましたが、円の数を変更しても1つしか出力されずに困っております。
また、その円も下から詰め込まれずに宙に浮いております。
何かアドバイスを頂けると助かります。
下記の文献を参考に取り組んでおります。
http://www.orsj.or.jp/archive2/or63-12/or63_12_762.pd
発生している問題・エラーメッセージ
エラーメッセージはでません。
エラーメッセージ
該当のソースコード
Python
1from pulp import * 2m = LpProblem(sense=LpMinimize) 3import matplotlib 4import matplotlib.pyplot as plt 5import numpy as np 6 7#n:個数 8#r=円の半径 9#W=容器の幅 10#UB=容器の高さ 11n=10 12r=0.1 13W=2.2 14UB=2.6 15 16fig = plt.figure() 17ax = fig.add_subplot(111,aspect='equal') 18ax.set_xlim([0,W]) 19ax.set_ylim([0,UB]) 20 21x=[LpVariable("x%d" %i, lowBound=0) for i in range(n)] 22y=[LpVariable("y%d" %i, lowBound=0) for i in range(n)] 23 24u=[[LpVariable("u%d%d" %(i,j),cat=LpBinary) for j in range(n)] for i in range(n)] 25v=[[LpVariable("v%d%d" %(i,j),cat=LpBinary) for j in range(n)] for i in range(n)] 26 27H=LpVariable("H") 28 29m += H 30for i in range(n): 31 for j in range(n): 32 m += x[i]+r <= x[j]+W*(1-u[i][j]) 33 m += y[i]+r <= y[j]+UB*(1-v[i][j]) 34 if i < j: 35 m += u[i][j]+u[j][i]+v[i][j]+v[j][i] >= 1 36 37for i in range(n): 38 m += x[i] <= W-r 39 m += y[i] <= H-r 40 41for x in range(n): 42 for y in range(n): 43 x=r*n 44 y=r*n 45 circle_n=plt.Circle((x,y),r) 46 ax.add_patch(circle_n) 47 48#グラフのタイトル 49plt.title("Sectional View") 50 51#x軸ラベル 52plt.xlabel("Hole diameter") 53 54#y軸ラベル 55plt.ylabel("depth") 56 57fig.savefig("test1.png")
試したこと
パラメーターを少しずつ変更しながら原因を探しておりますが、まだわかっておりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/17 06:47
2021/03/17 07:57
2021/03/17 08:16 編集
2021/03/18 03:05
2021/03/23 05:02