一、 fminimax函數求解的模型

minmax { f1, f2, f3, ……, f3}

s.t.  AX <= b (線性不等式約束)

AeqX = beq (線性等式約束)

C(X) <= 0 (非線性不等式約束條件)

Ceq(X) = 0 (非線性等式約束)

Lb <= X <= Ub (邊界約束條件)

二、 fminimax函數用法說明

1. 調用格式

x = fminimax(fun,x0)

x = fminimax(fun,x0,A,b)

x = fminimax(fun,x0,A,b,Aeq,beq)

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)(最常用的)

x =fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x =fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval,maxfval] =fminimax(…)

[x,fval,maxfval,exitflag]= fminimax(…)

[x,fval,maxfval,exitflag,output]= fminimax(…)

[x,fval,maxfval,exitflag,output,lambda]= fminimax(…)

2. 參數說明

(1)fun為目標函數;

(2)x0為初始值;

(3)A、b滿足線性不等約束 ,若沒有不等約束,則取A=[ ],b=[ ];

(4)Aeq、beq滿足等式約束 ,若沒有,則取Aeq=[ ],beq=[ ];

(5)lb、ub滿足 ,若沒有界,可設lb=[ ],ub=[ ];

(6)nonlcon的作用是通過接受的向量x來計算非線性不等約束 和等式約束分別在x處的值C和Ceq,通過指定函數柄來使用,如:

>>x =fminimax(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非線性約束函數,並保存為mycon.m:function[C,Ceq] = mycon(x)

C = …    % 計算x處的非線性不等約束 的函數值。

Ceq = …   % 計算x處的非線性等式約束 的函數值。

(7)options為指定的優化參數;

(8)fval為最優點處的目標函數值;

(9)maxfval為目標函數在x處的最大值;

(10)exitflag為終止迭代的條件;

(11)lambda是Lagrange乘子,它體現哪一個約束有效。

(12)output輸出優化信息。

三、 實例

設某城市有某種物品的10個需求點,第i個需求點Pi的坐標為(ai,bi),道路網與坐標軸平行,彼此正交。現打算建一個該物品的供應中心,且由於受到城市某些條件的限制,該供應中心只能設在x界於[5,8],y界於[5.8]的范圍之內。問該中心應建在何處為好?

P點的坐標為:

c774258d934392314ca26325bec25c33.jpe

1. 題目分析

設供應中心的位置為(x,y),要求它到最遠需求點的距離盡可能小,則數學模型為:

025940667fc4a31f42c500a62c399a75.jpe

2. fminimax函數參數分析

ff38d72c4371216ef4cf9ef37b5a09ef.jpe

6c977ea5d62cb89f2ed7cc14bc8e6699.jpe

da07f917d7782d8ac9955dbf30d3c43f.jpe

3. MATLAB代碼

(1)主函數文件

%求解極大值的極小值的主函數 main.m:

clear;

clc;

%x初始值,隨意設定

x0=[6;6];

%線性不等式約束AX <= b

A=[-10;1 0;0 -1;0 1];

b=[-5;8;-5;8];

%線性等式約束AeqX = beq

Aeq=[];

Beq= [];

%邊界約束條件Lb <= X <= Ub

lb=[0;0];

ub=[];

[x,fva,maxfval,exitflag,output]=fminimax(@myfun,x0,A,b,Aeq, Beq,lb,ub)

plot(x(1),x(2),'bo') % 圖中標出要求的點

(2)目標函數文件

%目標函數文件 myfun.m:

functionf=myfun(x)

x1=[14 3 5 9 12 6 20 17 8];

x2=[210 8 18 1 4 5 10 8 9];

str=[repmat('(', 10, 1) num2str(x1') num2str(x2') repmat( ')', 10, 1) ];

plot(x1,x2,'*r');%畫出10個需求點

text(x1,x2,cellstr(str)); %給10個需求點標出坐標

hold on;

%返回10個需求點的各自的目標函數

fori=1:10

f(i)=abs(x(1)-x1(i))+abs(x(2)-x2(i));

end

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐