%c,ceq:非线性不等式约束与非线性等式约束
%目标函数一定要转换为min类型的
%如果是max类型,需要把系数全部取负,并且将最后的结果*-1,得到正确的结果
functionf=optimization(x)
f=(x(1)-2)^2+(x(2)-1)^2+(x(3)-7)^2+(x(4)-9)^2
end
%保存一下
2.开始编写约束条件变量
%%看看A和b
%minf(x)=(x1-2)^2+(x2-1)^2+(x4-9)^2
%x1-2x2+x3-x4+1>=0
%2x1+x2-2x3+x4+5>=0
%x1^2/4-x2^2+x3-x4^2+1>=0
%x1^2+x2-x3+x4=99
%x1,x2的取值范围为-100~100
%x3,x4的取值范围为0~10
A=[-12-11;-212-1];%因为原式是>=,同样也需要转换成<=的形式
b=[-1;5];%b是线性不等式约束的右侧的值,因为移过去再乘以-1,所以相当于没变
%%Aeq和beq
%本约束条件中未出现线性等式约束,所以可赋值为空
Aeq=[];
beq=[];
%%lb和ub
%决策变量的上下界
lb=[-100-10000];%表示x1~x4的最小值分别为-100-10000
ub=[1001001010];
%%c和ceq
%非线性不等式约束和非线性等式约束我们也要放进一个专门的函数里面
3.编写非线性不等式约束和非线性等式约束代码函数myfun
function[c,ceq]=myfun(x)
%c是非线性不等式约束
c=-1*(1/4*x(1)^2-x(2)^2+x(3)-x(4)^2+1);%转换成小于等于
%ceq是非线性等式约束
ceq=x(1)^2+x(2)-x(3)+x(4)-99;
%如果c和ceq不止一个,那么可以写成矩阵的形式:类似A=[-12-11;-212-1];
End
4.执行一下约束条件变量,如下图:
5.在命令行中输入optimtool打开遗传算法工具箱。
遗传算法工具箱操作
在工具箱中输入内容如下:
然后点击Start:
点击start之后会出现下面这个图:
在这里由于迭代次数太少导致从图中看不出什么明显的结果。然后在start下面的表格内,有最优值和各个变量的值。
然后最优值和其变量的值已经解出来了,可以多求几次求平均值,都是可以的。
遗传算法工具箱不允许规划类方程中,同时出现线性约束和整型约束的,否则特别容易得到无解,甚至不能运行。