天天看點

matlab層次分析法代碼_MATLAB多目标優化

11.1.3  多目标優化

前面介紹的最優化方法隻有一個目标函數,是單目标最優化方法。但是,在許多實際工程問題中,往往希望多個名額都達到最優值,是以就有多個目标函數,這種問題稱為多目标最優化問題。

多目标規劃有許多解法,下面列出常用的幾種。

(1)化多為少法:将多目标問題化成隻有1個或2個目标的問題,然後用簡單的決策方法求解。最常用的是線性權重和法。

(2)分層序列法:将所有的目标按其重要程度依次排序,先求出第1個(最重要的)目标的最優解,然後在保證前一個目标最優解的前提下依次求下一個目标的最優解,一直求到最後一個目标為止。

(3)直接求非劣解法:先求出一組非劣解,然後按事先确定好的評價标準從中找出一個滿意的解。

(4)目标規劃法:當所有的目标函數和限制條件都是線性時,可以采用目标規劃法,它是20世紀60年代初由查納斯和庫珀提出來的。此方法對每一個目标函數都事前給定一個期望值,然後在滿足限制條件集合的情況下,找出使目标函數離期望值最近的解。

(5)多屬性效用法(MAUM):各個目标分别用各自的效用函數表示,然後構成多目标綜合效用函數,以此來評價各個可行方案的優劣。

(6)層次分析法:由T.沙基于1980年提出來。這種方法是通過對目标、限制條件、方案等的主觀判斷,對各種方案加以綜合權衡比較,然後評定優劣。

(7)重排次序法:把原來不好比較的非劣解,通過其他辦法排出優劣次序。此外,還有多目标群決策和多目标模糊決策等方法。

針對多目标優化問題,MATLAB提供了fgoalattain和fminimax 函數用來進行求解。篇幅有限,這裡僅舉例說明fgoalattain函數的用法,fminimax函數的用法讀者可自行查閱幫助文檔。

【例11-7】  某工廠因生産需要欲采購一種原材料,市場上這種原材料有兩個等級,甲級單價2元/千克,乙級單價1元/千克。要求所花總費用不超過200元,購得原材料總量不少于100千克,其中甲級原材料不少于50千克,問如何确定最好的采購方案。

設x1、x2分别為采購甲級和乙級原材料的數量(千克),要求總采購費用盡量少,總采購重量盡量多,采購甲級原材料盡量多。

首先需要編寫目标函數的M檔案myfun4.m,傳回目标計算值。具體代碼如下:

function f=myfun4(x)

f(1)=2*x(1)+ x(2);

f(2)=-x(1)- x(2);

f(3)=-x(1);

給定目标,權重按目标比例确定,給出初始值。具體代碼如下:

>> goal=[200 -100 -50];       %  要達到的目标

>> weight=[2040 -100 -50];   %  各個目标的權重

>> x0=[55 55];                  %  搜尋的初始值

%  限制條件

>> A=[2 1;-1 -1;-1 0];

>> b=[200 -100 -50];

>> lb=zeros(2,1);

%  調用fgoalattain函數進行多目标優化

>> [x,fval,attainfactor,exitflag] =...

fgoalattain(@myfun4,x0,goal,weight,A,b,[],[],lb,[])

經過計算,MATLAB輸出計算結果為:

x =

    50    50

fval =

   150  -100   -50

attainfactor =

  3.4101e-010

exitflag =

     4

是以,對于給定的權重比例,最好的采購方案是采購甲級原材料和乙級原材料各50千克。此時采購總費用為150元,總重量為100千克,甲級原材料總重量為50千克。

matlab層次分析法代碼_MATLAB多目标優化

繼續閱讀