問題タブ [ampl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mathematical-optimization - セット内の整数の合計と選択された要素の数を最小化する AMPL
以前、セットから最小数の整数を選択し、合計 >= 定数を持つ方法について尋ねた質問を投稿しました。私のコードは次のとおりでした:
合計を最小化するという新しい目的も追加することにしました。前の例では、cplex は 12 (7 と 5) を生成します。11 (7 と 4) を生成するようにします。この目的のために、次の目的を追加しました。
残念ながら、私は AMPL の学生版を持っているので、2 つの目標を使用することはできません。これで、私の新しいコードで問題は解決しますが、回避策や、2 つの目的を 1 つにまとめて同じ機能を維持するためのトリックがあるかどうかを尋ねたいと思います。
編集:合計を最小化するよりも、要素の数を最小化することに関心があります。
optimization - 反復操作を使用して制約の数を最小化する AMPL
後でプログラムで使用するために AMPL を学習しています。解決したい小さな問題があります。タイトルが示すように、反復操作を使用して制約の数を最小限に抑えようとしています。したがって、問題は次のとおりです。AとBの2つのセットがあり、コードがあると仮定します。
ここで、前の制約を展開すると、次の制約が形成されます。
x[1,a] + x[2,a] + x[3,a] <=1;
x[1,b] + x[2,b] + x[3,b] <=1;
x[1,c] + x[2,c] + x[3,c] <=1;
x[4,a] + x[5,a] + x[6,a] <=1;
x[4,b] + x[5,b] + x[6,b] <=1;
x[4,c] + x[5,c] + x[6,c] <=1;
これは、A のyサブセットとBのz要素に対して、合計y*z制約を取得することを意味します (この場合は 2 x 3 = 6 制約です)。
ここで、制約を次のように変更すると:
結果は次のようになります。
{(x[1,a] + x[2,a] + x[3,a]) * (x[1,b] + x[2,b] + x[3,b]) * (x[1,c] + x[2,c] + x[3,c])} <= 1;
{(x[4,a] + x[5,a] + x[6,a]) * (x[4,b] + x[5,b] + x[6,b]) * (x[4,c] + x[5,c] + x[6,c])} <= 1;
前のフォームと同じ結果になるはずですが、制約の数をy*zからyに減らしました。これは良い改善です!! もう1つの改善点は、論理的および制約です。
結果は次のようになります。
{(x[1,a] + x[2,a] + x[3,a]) <= 1} && {(x[1,b] + x[2,b] + x[3,b]) <= 1} && {(x[1,c] + x[2,c] + x[3,c]) <= 1};
{(x[4,a] + x[5,a] + x[6,a]) <= 1} && {(x[4,b] + x[5,b] + x[6,b]) <= 1} && {(x[4,c] + x[5,c] + x[6,c]) <= 1};
問題は、これを行うと、問題を線形または二次方程式から非二次方程式に変更し、cplexがそれを解決できなくなることです:/
問題を非二次問題に変換せずにこれを実行できるようにするための回避策やトリックはありますか (少なくともcplexを使用して解決する必要があります)。
これは、 Ax[1,a] + x[1,b] + x[1,c] = 1
の他の要素にも当てはまります。どうぞよろしくお願いいたします。
mathematical-optimization - 「カウント」を使用して制約から目標を作成する AMPL の難しさ
AMPL で小さな問題を解決しようとしていますが、それを制約に変換できないという問題に直面しました。問題は次のとおりです。 A、B、およびCの 3 つのセットがあるとします。Cの 1 つのサブセットに存在する場合、 A の2 つ以下の要素がBの 1 つの要素にリンクされるように、A の要素をBの要素にリンクしたい( Cの任意のサブセットの 3 つの要素のうち最大 2 つ) Bの 1 つの要素にリンクされています)。私はすでにこの部分をやった
この制約を書いたとします。
subject to constr {(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] <= 2;
コードの目的は、次の場合を最大化することです。 {(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] <= 1;
つまり、次の場合を最小限に抑えるために:
{(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] = 2;
.
この目的はどのように書けばよいでしょうか?また、( constraint is = 2 ) <= 定数 (MAX など)の回数を取得したい場合、どうすればそれを行うことができますか? 以下は、これまでに書いたコードです。AMPL の学生版と cplex の学生版を使用しています。どうぞよろしくお願いいたします。
私はこれを試しましたが、うまくいきませんでした(numberofもうまくいきませんでした):
subject to constr2 {b in B}: count {(i,j,k) in C} ( (x[i,b] + x[j,b] + x[k,b]) = 2 ) <= MAX;
ここで、MAX は次のように宣言されます。
cplex - インデックス式の AMPL 連続変数
AMPL で小さな問題を解決していて、小さな問題に直面しました。私は 4 セットA、B、C、およびD dimen 3と 1 つの変数x{A,B} binaryおよびy{B,C} binaryを持っています。
Dのサブセットの要素はすべてAからのものです。
A の各要素には、 Bからの要素を割り当てる必要があります。【この部分はできています】
Bの割り当てられた値からのすべての要素には、Cからの要素を割り当てる必要があります。【ここが問題】
このため、AからBに要素をマップする新しい変数map{A}を定義する必要がありました(これは、x[a,b] = 1 の場合、map[a] = b を意味します)。
私はこのようなものを書きたい: y[ map[a],c]
where {a in A, c in C} A の a の B のマップされた b を意味するが、 cplexは私にエラーを与える."continuous variable in index expression"
とにかくそうすることがありますか?前もって感謝します。あなたの助けに感謝します。
さらなる説明:
次のコードを想定します。