2015/7/21 情報学 ~最終課題の説明と演習2~ 2015年7月21日 笠井俊信 最終課題の内容 • シンプレックス法をBASICで記述 – データはプログラム内に記述 – 来週,途中まで演習・解説 – 続きを完成させてメールで提出 • 〆切 8月10日(月) – 8月11日にHPに解答例を公開 1 2015/7/21 【例題】 ある会社が、A、Bという製品を売り出している。 それら を製作するための材料はプラスチック、アルミ、ゴムであ る。 それぞれ1個を製作するために必要な材料の量は 下の表のとおりである。 プラスチック アルミ ゴム 単価 A 1kg 1kg 3kg 2万円 B 2kg 1kg 1kg 3万円 材料の量 14kg 8kg 18kg このとき、手持ちの材料の範囲内で売上高を最大 にするためには、A、Bをそれぞれいくつつくったら よいか? シンプレックス表の作成 Z 2 x1 3 x2 0 x1 2 x2 x3 x1 x2 14 x4 3x1 x2 8 x5 18 xn (n 1,2,3,4,5) 基底変数 x1 x2 x3 x4 x5 定数項 Z -2 -3 0 0 0 0 x3 1 2 1 0 0 14 x4 1 1 0 1 0 8 x5 3 1 0 0 1 18 2 2015/7/21 出力結果例 シンプレックス法の解法手順 • 終了条件: – 目的関数の係数がすべて正になったら終了 • 手順1 – 目的関数の係数の中から最小なものがある列qを抽出 • 手順2 – 手順1で求めたq列にある各行の要素で各行の定数項 を割ったものが最小となる行pを抽出(目的関数以外の行) • 手順3 – p行q列をピボットにして掃き出し演算を行う 終了条件を満たすまで手順1に戻り繰り返す 3 2015/7/21 課題を数ステップに分割 1. プログラム内のデータを変数に読み込む 2. 終了条件を記述 (後回し) – 終了条件を満たさない限り繰り返す 3. 4. 5. 6. 手順1(q列の抽出)を記述 手順2(p行の抽出)を記述 手順3(掃き出し演算)を記述 結果の出力 1.データを変数に読み込む 100 DIM X(10,10) 110 READ G,R 120 FOR I=1 TO G 130 FOR J=1 TO R 140 READ X(I,J) 150 NEXT J 160 NEXT I 600 DATA 4,7 610 DATA 0,-2,-3,0,0,0,0 620 DATA 3,1,2,1,0,0,14 630 DATA 4,1,1,0,1,0,8 640 DATA 5,3,1,0,0,1,18 650 END 2次元配列のすべてのデータを操作するには For文を入れ子にする必要がある 4 2015/7/21 元データを出力してみよう シンプレックス法の解法手順 • 終了条件: – 目的関数の係数がすべて正になったら終了 • 手順1 – 目的関数の係数の中から最小なものがある列qを抽出 • 手順2 – 手順1で求めたq列にある各行の要素で各行の定数項 を割ったものが最小となる行pを抽出(目的関数以外の行) • 手順3 – p行q列をピボットにして掃き出し演算を行う 終了条件を満たすまで手順1に戻り繰り返す 5 2015/7/21 3.手順1(q列の抽出)を記述 手順1 目的関数の係数の中から最小 なものがある列qを抽出 X(1,2) ~ X(1,R-1) の最小のデータの列の場所を 抽出。 戦略例: 変数K,Mの初期値を0にしておき, X(1,2) ~ X(1,R-1) で M未満のデータの値をMに,その列をKに代入する。 最終的なKが求めるq 戦略例: 変数K,Mの初期値を0にしておき, X(1,2) ~ X(1,R-1) で M未満のデータの値をMに,その列をKに代入する。 最終的なKが求めるq • 変数K, Mに0を代入 • (繰り返し)Jを2からR-1以下まで繰り返す – (条件分岐)X(1,J)がM以上か? • 真ならば6行目へ • 偽ならば M=X(1,J) K=J – Jを1増やす 6 2015/7/21 100 REM Program 0722 110 DIM X(10,10) 120 READ G,R 130 FOR I=1 TO G 140 FOR J=1 TO R 150 READ X(I,J) 160 NEXT J 170 NEXT I 180 PRINT "元データ" 190 FOR I=1 TO G 200 FOR J=1 TO R 210 PRINT X(I,J); 220 NEXT J 230 PRINT "" 240 NEXT I 250 LET K=0 260 LET M=0 270 FOR J=2 TO R-1 280 IF X(1,J) >= M THEN 310 290 LET K=J 300 LET M=X(1,J) 310 NEXT J 320 PRINT K 600 DATA 4,7 610 DATA 0,-2,-3,0,0,0,0 620 DATA 3,1,2,1,0,0,14 630 DATA 4,1,1,0,1,0,8 640 DATA 5,3,1,0,0,1,18 650 END 7
© Copyright 2025 ExpyDoc