2012-11-21 27 views
3

我必須在matlab數學工具箱中使用函數linprog解決一個簡單的問題。問題是我不知道如何格式化我的方程,所以這個函數解決了這個問題。MATLAB中linprog的格式化方程

這是我試圖最小化功能(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函數的參數嗎?

回答

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,磅)

最多的參數一些移調應該做的伎倆。

1

我不相信你可以提出這個問題,因爲你說它是一個linprog問題。 「MIN」操作是個問題。由於目標函數不能表示爲

y = f'x. 

即使您的約束是線性的,您的目標函數也不是。

也許有一些技巧,你可以線性化它。但如果是這樣,那是一個數學問題。請參閱:https://math.stackexchange.com/

+0

我在這裏的回答是不正確的,請參閱擴展的「這可能會改寫爲」一個技術的問題的一部分,以將非線性目標映射到線性目標函數 – Pete