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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

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

Python

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

Q&A

0回答

885閲覧

1機械ジョブスケジューリングの実装

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

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

Python

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

0グッド

0クリップ

投稿2020/05/15 12:43

編集2020/06/25 02:22

前提・実現したいこと

Pythonのpulpを使って1機械重み付き完了時刻和ジョブスケジューリングを実装したいと思っています。
それぞれ
・処理時間p
・重要度w
・リリース時刻r
・処理開始時刻s
・順序を表すx

エラーメッセージは出ませんが、以下のコードで実装すると、sがrと同じ数値になってしまいます。

発生している問題・エラーメッセージ

ジョブ 1 を処理するのは 4 番目で作業開始時刻は 4.0 ジョブ 2 を処理するのは 8 番目で作業開始時刻は 63.0 ジョブ 3 を処理するのは 8 番目で作業開始時刻は 39.0 ジョブ 4 を処理するのは 10 番目で作業開始時刻は 70.0 ジョブ 5 を処理するのは 9 番目で作業開始時刻は 77.0 ジョブ 6 を処理するのは 10 番目で作業開始時刻は 112.0 ジョブ 7 を処理するのは 8 番目で作業開始時刻は 62.0 ジョブ 8 を処理するのは 6 番目で作業開始時刻は 6.0 ジョブ 9 を処理するのは 6 番目で作業開始時刻は 9.0 ジョブ 10 を処理するのは 8 番目で作業開始時刻は 6.0 Obj.value 2081.0

該当のソースコード

Python

1def main(): 2 3 assignment = pulp.LpProblem("minimize_weight_job_cost", pulp.LpMinimize 4# 変数宣言 5 6 #x[j][k]を定義 7 x=[[0 for j in range(job_num)]for k in range(job_num)] 8 for k in range(job_num): 9 for j in range(job_num): 10 x[k][j] = pulp.LpVariable(f"x({k},{j})", 0, 1, pulp.LpInteger) 11 12 #sを定義 13 s = [None for i in range(job_num)] 14 for i in range(job_num): 15 s[i] = pulp.LpVariable(f"s_{i}" , 0 , sys.maxsize , pulp.LpContinuous) 16 17 #Cを定義 18 C = s + p 19 #for i in range(job_num): 20 #C += [pulp.LpVariable(f"c_{i}" , 0 , sys.maxsize , pulp.LpContinuous)] 21 22 23# 目的関数 24 assignment += sum(w[j] * C[j] for j in range(job_num)) 25# 1本目 26 for j in range(job_num): 27 assignment += C[j] == s[j] + p[j] 28 29# 2本目 30 for j in range(job_num): 31 assignment += s[j] >= r[j] 32 33# 3本目 34 for j in range(job_num): 35 for k in range(job_num): 36 for i in range(job_num): 37 assignment += s[j] >= r[k] * x[k][j] + sum(p[i] * (x[i][j] - x[i][k])) 38 39# 4本目 40 for j in range(job_num): 41 for k in range(job_num): 42 if j != k: 43 assignment += x[j][k] + x[k][j] == 1 44 45# 5本目 46 for i in range(job_num): 47 for j in range(job_num): 48 if i != j: 49 for k in range(job_num): 50 if i != k and j != k: 51 assignment += x[j][k] + x[k][i] + x[i][j] <= 2 52 53 54 55 56#順番 57 job = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 58 for j in range(job_num): 59 for k in range(job_num): 60 if x[j][k].value() == 1: 61 job[j] -= 1 62 job[j] += int(job_num) 63 64 65#結果の出力 66 print(pulp.LpStatus[status]) 67 68 for i in range(job_num): 69 print("ジョブ",i + 1,"を処理するのは",job[i],"番目で作業開始時刻は",s[i].value()) 70 71 print("Obj.value", assignment.objective.value()) 72 73 74 75 76 77if __name__=="__main__": 78 main()

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問