質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1030閲覧

python pulpを用いた最適化計算

koh1988

総合スコア0

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/07 22:52

前提・実現したいこと

下記論文の内容を元に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
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2020/12/07 23:37

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問