[解決済み] GAMSでマクロ/ループを作成する
2022-02-17 16:50:47
質問
GAMSで以下のセットとパラメータを考える。
set i / 1,3 /
j / j1,j2,j3 /;
parameter stock(i,j);
パラメータに特定の値を入れたいと考える。
stock("1","j1") = 10;
stock("3","j3") = 10;
それを2行で書くのではなく、マクロ、$setGlobal、loop(または同様のもの)を使って、まず(1)どのセットに対してそれを行うかを指定し、(2)次に式を1行で書くだけでいいのでしょうか。
サブセットを作ることができる
set subset_i(i) / 1,3/
subset_j(j) / j1,j3 /;
そして、これらのサブセットをループします。
loop(subset_i,
loop(subset_j,
stock(i,j) = 10;
);
);
しかし、その後、各組み合わせの値を取得します。
1 j1 10
1 j2 10
1 j3 10
3 j1 10
3 j2 10
3 j3 10
欲しいのは、ただひとつ。
1 j1 10
3 j3 10
どうすればいいんだ?
どのように解決するのですか?
設定したいのは、まさに対角線(1-j1; 2-j2)なのでしょうか?それとも、これは単なるランダムな例で、マッピングは別のものでもよいのでしょうか?もし対角線であれば、次のようにすればよいでしょう。
set i / 1,2 /
j / j1,j2 /;
parameter stock(i,j);
stock(i,j)$(ord(i)=ord(j)) = 10;
display stock;
EDIT(コメント/編集された質問を元に)。
また、対角線についてだけでなければ、より一般的な写像を明示的に定義することもできます。これは次のようにできる。
set i / 1, 3 /
j / j1, j2, j3 /
map(i,j) / 1.j1, 3.j3 /;
parameter stock(i,j);
stock(map(i,j)) = 10;
display stock;
関連
-
[解決済み] フローチャートでネストしたforループを表示する
-
[解決済み] MIPSで階乗を行うコードはどのように書くのですか?
-
[解決済み] jQueryの各ループから抜け出すには?
-
[解決済み] GAMSでマクロ/ループを作成する
-
[解決済み] AutoHotKeyのホットキーでSetTimerをオフに切り替えるには?
-
[解決済み] Rustで範囲指定はどうやるの?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] C#のループ - breakとcontinue
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular 2 formArraysでname属性が指定されていないコントロールが見つからない。
-
[解決済み] フローチャートでネストしたforループを表示する
-
[解決済み] MIPSで階乗を行うコードはどのように書くのですか?
-
[解決済み] GAMSでマクロ/ループを作成する
-
[解決済み] AutoHotKeyのホットキーでSetTimerをオフに切り替えるには?
-
[解決済み] Rustで範囲指定はどうやるの?
-
[解決済み] Angular 2 formArraysに指定されていないname属性を持つコントロールが見つからない
-
[解決済み] マップの全キーに対する反復処理
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
-
[解決済み] Kotlin の `forEach` における `break` と `continue` について