個(gè)人養(yǎng)老金查詢山東seo多少錢
優(yōu)化問題描述
優(yōu)化
優(yōu)化算法是指在滿足一定條件下,在眾多方案中或者參數(shù)中最優(yōu)方案,或者參數(shù)值,以使得某個(gè)或者多個(gè)功能指標(biāo)達(dá)到最優(yōu),或使得系統(tǒng)的某些性能指標(biāo)達(dá)到最大值或者最小值
線性規(guī)劃
線性規(guī)劃是指目標(biāo)函數(shù)和約束都是線性的情況
[x,fval]=linprog(f,A,b,Aeq,Beq,LB,UB)
x:求得最優(yōu)情況下變量的解
fval:求得最優(yōu)目標(biāo)值
f:目標(biāo)函數(shù)的系數(shù)(符號(hào)按最小值標(biāo)準(zhǔn),若目標(biāo)是求解機(jī)大值可以通過添加負(fù)號(hào)改成求極小值)
A:不等式約束的變量系數(shù)(符合按小于標(biāo)準(zhǔn),如果是大于約束可通過加負(fù)號(hào)變成小于)
b:不等式約束的常量
Aeq:等式約束的變量系數(shù)Beq:等式約束的常量LB:變量的下限UB:變量的上限
%% 線性規(guī)劃
clc;clear;close all;
%目標(biāo)函數(shù)/max 要改成min 的形式,max最大值可以系數(shù)加個(gè)負(fù)號(hào)的變成求min
f=[-1;-2;3]; %不等約束 /化成標(biāo)準(zhǔn)形式 x1+x2<=
% -x1-x2+0*x3<=-3
%0*x1-x2-x3<=-3
A=[-1,-1,0;0,-1,-1];%左邊特征矩陣
b=[-3;-3]; %右邊%等式約束
Aeq=[1,0,1];
Beq=[4];%變量約束,上限,下限
LB=zeros(3,1);
UB=2*ones(3,1);%優(yōu)化
[x,fval]=linprog(f,A,b,Aeq,Beq,LB,UB);
%
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval)];
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值為:',num2str(x(i))];disp(xstr)
end
非線性規(guī)劃
非線性規(guī)劃是指目標(biāo)函數(shù)和約束有非線性的情況
?
%% 非線性規(guī)劃1
clc;clear;close all;
%初始解,隨意給個(gè)初始解
x0=zeros(3,1);%不等約束
A=[2,1,3];%左邊特征矩陣
b=[6]; %右邊%描述線性
%等式約束
Aeq=[];
Beq=[];%變量約束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);%
%優(yōu)化求解 max 加負(fù)號(hào)
fun = @(x)-x(1)^2+x(2)^2-x(2)*x(3);
%
nonlcon = @unitdisk;
[x,fval]=fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon);objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(-fval)];%num2str 數(shù)字變成字符
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值為:',num2str(x(i))];disp(xstr)
endfunction [c,ceq] = unitdisk(x)
%c為不等式非線性約束
%ceq為等式非線性約束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
%多個(gè)非線性約束的話,可以用[約束1;約束2];
ceq = [];
end%%
%遇到較為復(fù)雜的目標(biāo)函數(shù)
%可以寫為函數(shù)的形式
fun = @obj;
function y = obj(x)y1 = x(1)^2+x(2)^2;y = sqrt(y1)+x(3)^3;
end
%%
多目標(biāo)優(yōu)化
?
多目標(biāo)求解的第一種方法:
%% 非線性規(guī)劃1
clc;clear;close all;
%%
%初始解,隨意給個(gè)初始解
x0=zeros(3,1);%不等約束
A=[2,1,3];%左邊特征矩陣
b=[6]; %右邊%等式約束
Aeq=[];
Beq=[];%變量約束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);
%優(yōu)化求解
%%
w1=0.5;w2=0.5;
fun = @(x)(-x(1)^2+x(2)^2-x(2)*x(3))*w1+(2*x(1)^2-x(2)^3+2*x(2)*x(3))*w2;nonlcon = @unitdisk;
[x1,fval1]=fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值為:',num2str(x1(i))];disp(xstr)
endfunction [c,ceq] = unitdisk(x)
%c為不等式非線性約束
%ceq為等式非線性約束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
ceq = [];
end
多目標(biāo)求解的第二種方法
%% 非線性規(guī)劃1
clc;clear;close all;
%%
%初始解,隨意給個(gè)初始解
x0=zeros(3,1);%不等約束
A=[2,1,3];%左邊特征矩陣
b=[6]; %右邊%等式約束
Aeq=[];
Beq=[];%變量約束,上限,下限
LB=zeros(3,1);
UB=1*ones(3,1);
%優(yōu)化求解
%%
fun1 = @(x)-x(1)^2+x(2)^2-x(2)*x(3);
fun2 = @(x)2*x(1)^2-x(2)^3+2*x(2)*x(3);
%%
nonlcon = @unitdisk;
[x1,fval1]=fmincon(fun1,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值為:',num2str(x1(i))];disp(xstr)
end
[x2,fval2]=fmincon(fun2,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval2)];
disp(objstr)
for i=1:length(x2)xstr=['x',num2str(i),'的值為:',num2str(x2(i))];disp(xstr)
end
%% 多目標(biāo)規(guī)劃
goal=[fval1,fval2];
func = @(x)[-x(1)^2+x(2)^2-x(2)*x(3);2*x(1)^2-x(2)^3+2*x(2)*x(3)];
weight=[1,1];
[x,fival]=fgoalattain(func,x0,goal,weight,A,b,Aeq,Beq,LB,UB,nonlcon);
disp('在兩個(gè)目標(biāo)的優(yōu)化結(jié)果為')
disp(func(x))
for i=1:length(x)xstr=['x',num2str(i),'的值為:',num2str(x(i))];disp(xstr)
end
%%
function [c,ceq] = unitdisk(x)
%c為不等式非線性約束
%ceq為等式非線性約束
c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
ceq = [];
end
%% 非線性規(guī)劃1
clc;clear;close all;
%%
%初始解,隨意給個(gè)初始解
x0=zeros(10,1);%不等約束
A=[];%左邊特征矩陣
b=[]; %右邊%等式約束
Aeq=[];
Beq=[];%變量約束,上限,下限
LB=-1*ones(10,1);LB(1)=0;
UB=1*ones(10,1);
%優(yōu)化求解
%%
fun1 = @obj1;
fun2 = @obj2;
%%
nonlcon = [];
[x1,fval1]=fmincon(fun1,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval1)];
disp(objstr)
for i=1:length(x1)xstr=['x',num2str(i),'的值為:',num2str(x1(i))];disp(xstr)
end
[x2,fval2]=fmincon(fun2,x0,A,b,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval2)];
disp(objstr)
for i=1:length(x2)xstr=['x',num2str(i),'的值為:',num2str(x2(i))];disp(xstr)
end
%% 多目標(biāo)規(guī)劃
goal=[fval1,fval2];
func = @obj3;
weight=[1,1];
[x,fival]=fgoalattain(func,x0,goal,weight,A,b,Aeq,Beq,LB,UB,nonlcon);
disp('在兩個(gè)目標(biāo)的優(yōu)化結(jié)果為')
disp(func(x))
for i=1:length(x)xstr=['x',num2str(i),'的值為:',num2str(x(i))];disp(xstr)
end
%%
function y1=obj1(x)[dim, num] = size(x);tmp = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1 = sum(tmp(3:2:dim,:)); % odd indextmp2 = sum(tmp(2:2:dim,:)); % even indexy1 = x(1,:) + 2.0*tmp1/size(3:2:dim,2);
% y(2,:) = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
function y2=obj2(x)[dim, num] = size(x);tmp = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1 = sum(tmp(3:2:dim,:)); % odd indextmp2 = sum(tmp(2:2:dim,:)); % even index
% y2 = x(1,:) + 2.0*tmp1/size(3:2:dim,2);y2 = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
function y=obj3(x)[dim, num] = size(x);tmp = zeros(dim,num);tmp(2:dim,:)= (x(2:dim,:) - sin(6.0*pi*repmat(x(1,:),[dim-1,1]) + pi/dim*repmat((2:dim)',[1,num]))).^2;tmp1 = sum(tmp(3:2:dim,:)); % odd indextmp2 = sum(tmp(2:2:dim,:)); % even indexy(1,:) = x(1,:) + 2.0*tmp1/size(3:2:dim,2);y(2,:) = 1.0 - sqrt(x(1,:)) + 2.0*tmp2/size(2:2:dim,2);
end
% function [c,ceq] = unitdisk(x)
% %c為不等式非線性約束
% %ceq為等式非線性約束
% c=x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6;
% ceq = [];
% end