前提・実現したいこと
下記論文の内容を元にpythonを用いて最適化計算を行いたい。
https://www.jstage.jst.go.jp/article/jima/55/1/55_KJ00004044776/_article/-char/ja/
機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
infeasible
該当のソースコード
ソースコード
pip install --no-index --find-links=pulp pulp
import pulp
import pandas as pd
import numpy as np
df_process=pd.read_excel("process_product.xlsx")
df_process=df_process.set_index("製品名/工程番号")
process_array=np.array
#工程情報
j_plan=20 #生産台数,生産順序 j=1は1番目
r_index=20 #製品インデックス 製品1~製品20を生産
#タクトタイム
t=6.2
#コンベア速度
vc=1
#作業ステーション長
L=7
作業ステーション数
k_station=12
#定数
m1=100
m2=100
prob=pulp.LpProblem(name="kumijun",sense=pulp.LpMinimize)
process_array=df_process.values
process_array
#目的変数
a=[]
#制約条件1 Σzj=1
for r in range(r_index):
aj=[pulp.LpVariable('a{}_{}'.format(r,j),0,1,cat=pulp.LpBinary) for j in range(j_plan)]
prob += pulp.lpSum(aj) == 1
a.append(aj)
#制約条件2 Σzr=1
for j in range(j_plan):
ar=[a[r][j] for r in range(r_index)]
prob += pulp.lpSum(ar) == 1
#変数定義 Xjk
X=[]
for j in range(j_plan):
Xk=[pulp.LpVariable('X{}_{}'.format(j,k) ,0,None,cat=pulp.LpContinuous) for k in range(k_station)]
X.append(Xk)
#変数定義 zjk
z=[]
for j in range(j_plan):
zk=[pulp.LpVariable('z{}_{}'.format(j,k) ,0,None,cat=pulp.LpContinuous) for k in range(k_station)]
z.append(zk)
#変数y1jkの定義
y1=[]
for j in range(j_plan):
y1k=[pulp.LpVariable('y1_{}_{}'.format(j,k) ,0,1,cat=pulp.LpBinary) for k in range(k_station)]
y1.append(y1k)
#変数y2jkの定義
y2=[]
for j in range(j_plan):
y2k=[pulp.LpVariable('y2_{}_{}'.format(j,k) ,0,1,cat=pulp.LpBinary) for k in range(k_station)]
y2.append(y2k)
#制約条件1 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=z[j][k]-vct>=-m1y2[j][k]
#制約条件2 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=z[j][k]-vc*t<=X[j][k]
#制約条件3 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=X[j][k]>=0
#制約条件4 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=z[j][k]>=L
#生産開始位置初期化 z0=0
for k in range(k_station):
X[0][k]=0
#製品rが生産順序j番の時の工程kにおける作業時間
tπ=np.dot(a,process_array)
#制約条件5 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=X[j][k]+vctπ[j][k]>=m2(y2[j][k]-1)+L
#制約条件6 z=0は除外
for j in range(1,j_plan):
for k in range(k_station):
prob+=X[j][k]+vc*tπ[j][k]<=z[j][k]
#目的関数
g=[]
for j in range(1,j_plan):
gj=sum(X[j-1][k]+vc*tπ[j][k]-L for k in range(k_station) )
g.append(gj)
prob +=pulp.lpSum(g[j] for j in range(0,j_plan-1))
print(prob)
status=prob.solve()
print("Status",pulp.LpStatus[status])
試したこと
ここに問題に対して試したことを記載してください。
実行結果が「infeasible」になるため、解を導き出せるようにしたいと考えております。
補足情報(FW/ツールのバージョンなど)
python3
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー