matlab中x1 0 12 2,[matlab] 12.Optimization Tool的使用

1.quadprog 二次规划的函数

8682df8a771446c90971d5dd6797b740.png

Matlab 中二次规划的数学模型可表述如下

6fd18dc56a22455fba7845762802deb7.png

其中

H是把目标函数二次项部分进行实对称矩阵,

f是线性函数的列向量。

例求解二次规划

15dcd1cd1d1c1f74031cecf9d78da247.png

得到

h=[4,-4;-4,8]; 注意Matlab 中二次规划的数学模型中H 之前有个1/2 所以 对称二次型矩阵要乘以2 即2.*[2,-2;-2,4]=[4,-4;-4,8]

f=[-6;-3]; 目标函数线性部分的列向量。

a=[1,1;4,1]; 不等式约束的A矩阵

b=[3;9];

lower[0,0]

依次输入Optimization Tool

6639948e79a13b6acbb0c614e099cee9.png

2.单一目标ga求解 遗传算法 (可以替代1中的解法,比较万能 不过求出来的是近似最优解)

818fbcca12b660768517cd04257db0a2.png

第一步首先是编写适应度函数 fitness.m

function f =fitness(x)

f1=4*x(1).^3+4*x(1)*x(2)+2*x(2).^2-42*x(1)-14;

f2=4*x(2).^3+4*x(1)*x(2)+2*x(2).^2-26*x(1)-22;

f=f1.^2+f2.^2;

3d16c0d462d9cdb73554202c1ade151c.png

Fitness function 填写适应度函数的句柄

有两个变量 所以填2

然后勾选右边option进行具体参数调整,最后勾选绘图

1625707bad43208c62792534cac2545e.png

得到结果

7480b31b87f5b6373b388f5e2ed83bf8.png

最终值 x1=-0.275 x2=1.448 fval=0.0165

98abc3619fb9c40a9967f8bf3b9767a9.png

3.多目标优化 gamultiobj

b88204735cda02d88ea47441579e8498aee.jpg

adac128a27fc076dcd0fb49798c40aa3ec6.jpg

function f =fitness(x)

f(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-(x(1)^2)*(x(2)^2);

f(2)=x(2)^4-(x(1)^2)*(x(2)^2)+x(1)^4+x(1)*x(2);

多目标适应度函数 fitness.m

f8ca0079058459d343c8caa81b52e0e1.png

38d2ed32368f401267b5318f2def11d7.png

07c8113fb1caa92d34a164e829bb4597.png

这三个绘图选项 勾选 特别是Pareto front

61e1949704d51b52dbdac1f400295463.png

最后得到结果 x1,x2,f1,f2

de0927f537e3979d4f40c6e1b55acff0.png

4.模拟退火算法SA 工具箱应用

38f5626408489a296970380e4d1499ed.png

function y =fitness(x)

y= 20+x(1)^2+x(2)^2-10*(cos(2*pi*x(1))+cos(2*pi*x(2)));

求最小值

x0=[2.5,2.5] %初始值

lb=[-5,-5]变量下界

ub=[5,5]变量上届

右边参数 function tolerance 改成1e-10 精度更大

093fc951f36f6e0a28751799f1c2a78f.png

311eb03b723d50df68c6807f74c27bda.png

10cd6209946efc54b3bbe9ddfb393914.png

得到最优结果 x1=0 ,x2=0 y=0

5.fsolve 用最小二乘法来求解非线性方程组

be547f2b98ee0898b5907d309b14e4e9.png

71988f403631f290799067425871abb65c8.jpg

dbcbbe089a456e60d5cbc494d72d80129e8.jpg

function q=fitness(p)

x=p(1);

y=p(2);

q(1)=x-0.6*sin(x)-0.3*cos(y);

q(2)=y-0.6*cos(x)+0.3*sin(y);

fitness.m

P为输入的2*1矩阵[x y] 通常输入初始点

在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。

44c3d3623324741c074c93f14d264dc1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值