3

linprogmatlab 数学ツールボックスの関数を使用して簡単な問題を解決する必要があります。問題は、方程式をフォーマットする方法がわからないため、この関数が問題を解決することです。

これは私が最小化しようとしている関数です(a_iいくつかの与えられた係数xはR ^ 5にあります):

x = argmax min{a1*x1 + a2*x2, a2*x2 + a3*x3 + a4*x4, a4*x4 + a5*x5}

対象:

sum(x_i) = 3000
all x_i >= 0

これは次のように言い換えることができます。

(x, lambda) = argmin(-lambda)

対象:

a1*x1 + a2*x2 >= lambda
a2*x2 + a3*x3 + a4*x4 >= lambda
a4*x4 + a5*x5 >= lambda
sum(x_i) = 3000
all x_i >= 0

最小/最大引数を含まない単純な線形関数の最小化の例しか見つけることができませんでした。linprog関数の引数として構造体を作成する方法を教えてください。

4

2 に答える 2

1

次のことを試してみましょうあなたのxベクトルは今です

[x1 x2 x3 x4 x5 lambda]

客観的なベクトル

f = [0 0 0 0 0 -1]

等式制約:

Aeq = [1 1 1 1 1 0] beq = 3000

不等式制約:

A = [-a1 -a2 0 0 0  1; 0 -a2 -a3 -a4 0 1; 0 0 0 -a4 -a5 1] b = [0;0;0]

下限:

lb = [0 0 0 0 0 -inf]

今試してみてください

linprog(f、A、b、Aeq、beq、lb)

引数のいくつかの転置まではトリックを行う必要があります。

于 2012-11-21T13:01:50.213 に答える
1

あなたがlinprogの問題としてそれを表現したので、あなたが質問を提起することができるとは思わない。「MIN」操作が問題です。目的関数は次のように表現できないため

y = f'x.

制約は線形ですが、目的関数は線形ではありません。

たぶん、いくつかのトリックでそれを線形化することができます。しかしそうだとすれば、それは数学の問題です。参照:https ://math.stackexchange.com/

于 2012-11-21T12:49:19.923 に答える