matlab非线性规划实例
- 格式:pdf
- 大小:353.56 KB
- 文档页数:3
matlab解决⾮线性规划问题(凸优化问题)当⽬标函数含有⾮线性函数或者含有⾮线性约束的时候该规划问题变为⾮线性规划问题,⾮线性规划问题的最优解不⼀定在定义域的边界,可能在定义域内部,这点与线性规划不同;例如:编写⽬标函数,定义放在⼀个m⽂件中;编写⾮线性约束条件函数矩阵,放在另⼀个m⽂件中;function f = optf(x);f = sum(x.^2)+8;function [g, h] = limf(x);g = [-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20]; %⾮线性不等式约束h = [-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %⾮线性等式约束options = optimset('largescale','off');[x y] = fmincon('optf',rand(3,1),[],[],[],[],zeros(3,1),[],...'limf',options)输出为:最速下降法(求最⼩值):代码如下:function [f df] = detaf(x);f = x(1)^2+25*x(2)^2;df = [2*x(1)50*x(2)];clc,clear;x = [2;2];[f0 g] = detaf(x);while norm(g)>1e-6 %收敛条件为⼀阶导数趋近于0p = -g/norm(g);t = 1.0; %设置初始步长为1个单位f = detaf(x+t*p);while f>f0t = t/2;f = detaf(x+t*p);end %这⼀步很重要,为了保证最后收敛,保持f序列为⼀个单调递减的序列,否则很有可能在极值点两端来回震荡,最后⽆法收敛到最优值。
x = x+t*p;[f0,g] = detaf(x);endx,f0所得到的最优值为近似解。
MATLAB优化应用非线性规划非线性规划是一类数学优化问题,其中目标函数和约束条件都是非线性的。
MATLAB作为一种强大的数值计算软件,提供了丰富的工具和函数,可以用于解决非线性规划问题。
本文将介绍如何使用MATLAB进行非线性规划的优化应用,并提供一个具体的案例来演示。
一、MATLAB中的非线性规划函数MATLAB提供了几个用于解决非线性规划问题的函数,其中最常用的是fmincon函数。
fmincon函数可以用于求解具有等式约束和不等式约束的非线性规划问题。
其基本语法如下:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是目标函数,x0是变量的初始值,A和b是不等式约束的系数矩阵和右端向量,Aeq和beq是等式约束的系数矩阵和右端向量,lb和ub是变量的上下界,nonlcon是非线性约束函数,options是优化选项。
二、非线性规划的优化应用案例假设我们有一个工厂,需要生产两种产品A和B,目标是最大化利润。
产品A 和B的生产成本分别为c1和c2,售价分别为p1和p2。
同时,我们需要考虑两种资源的限制,分别是资源1和资源2。
资源1在生产产品A和B时的消耗分别为a11和a12,资源2的消耗分别为a21和a22。
此外,产品A和B的生产量有上下限限制。
我们可以建立以下数学模型来描述这个问题:目标函数:maximize profit = p1 * x1 + p2 * x2约束条件:c1 * x1 + c2 * x2 <= budgeta11 * x1 + a12 * x2 <= resource1a21 * x1 + a22 * x2 <= resource2x1 >= min_production_Ax2 >= min_production_Bx1 <= max_production_Ax2 <= max_production_B其中,x1和x2分别表示产品A和B的生产量,budget是预算,min_production_A和min_production_B是产品A和B的最小生产量,max_production_A和max_production_B是产品A和B的最大生产量。
多元⾮线性规划Matlab,⾮线性规划MATLAB代码下⾯是三个⾮线性规划领域的算法。
课堂上给予了详细的讲解,在实践环节让学⽣编程实现,从⽽可以实验复杂⼀些的例⼦,加深对算法的理解。
下⾯共有四个程序grad,simplelinesearch,bfgs和phr,全部使⽤MATLAB语⾔编写。
这些代码远未完善,可修改余地很⼤,仅供教学之⽤。
function gradf=grad(hfun,x)%GRAD 数值法求函数在给定点处的导数值(⼀元函数)或梯度(多元函数)% gradf = grad(hfun,x0) hfun是函数句柄或内联函数,x0是⼀定点或⼀批点(按列);返回% 值gradf是函数在该点处的导数或梯度。
% 要求函数能对成批的点求函数值。
⽐如:feval(hfun,X)返回⼀个与X同列的⾏向量,对应于以% X每⼀列作为函数⾃变量⽽求得的函数值。
%% Reference: 《最优化计算原理与算法程序设计》, 粟塔⼭等编著, 国防科技⼤学出版社% (湖南), 2001.%% $Author: WBC $ $Date: 2003/10/25 $n = length(x);h=1e-3; % 数值法求梯度的步长w1=zeros(n,1);%h/2w2=w1; %-h/2w3=w1; %hw4=w1; %-hfor i=1:nx(i)=x(i)+h/2;w1(i)=hfun(x);x(i)=x(i)-h;w2(i)=hfun(x);x(i)=x(i)-h/2;w4(i)=hfun(x);x(i)=x(i)+2*h;w3(i)=hfun(x);x(i)=x(i)-h;endgradf=(8*(w1-w2)-(w3-w4))/(6*h);function [fv,x,lambda,exitflag]=simplelinesearch(hf,rho,l,u,lambda0,fv0,x0,g,d)%LINESEARCH 简单线搜索%输⼊参数:% hf -- 函数句柄,⽬标函数% rho -- 实标量,简单线搜索的参数,介于0到0.5之间的数% l -- 实标量,简单线搜索的参数,介于0到1之间的数% u -- 实标量,简单线搜索的参数,介于0到1之间的数,满⾜u>l% alpha0 -- 实标量,步长的初始值% fv0 -- 实标量,⼀维搜索的初始⽬标函数值,即 hf(x0+alpha_0*d)% x0 -- 实列向量,当前点% g -- 实列向量,函数hf在当前点处的梯度% d -- 实列向量,函数hf在当前点处的搜索⽅向%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% lambda -- 实标量,可接受步长% exitflag -- 整型标量,等于0表⽰线搜索成功,等于-1表⽰线搜索失败(内部迭代次数⼤于iterMax) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20lambda = lambda0;x = x0;i = 0;imax = 30; % 最⼤迭代次数,⽤户可以修改% 主循环gd = dot(g, d);while i <= imaxfv = hf(x + lambda*d);i = i + 1;if fv < fv0 + lambda * rho * gd;x = x + lambda*d;exitflag = 0;return;endlambda_bar = -gd*lambda^2*0.5/(fv-fv0-lambda*gd);lambda = min(lambda_bar, u*lambda);endexitflag=0;if i >= imax && fv >= fv0fv = fv0;x = x0;lambda = 0;exitflag = -1;endfunction [fv, x, exitflag] = bfgs(hf, x0, epsi)%BFGS ⽆约束问题的BFGS算法%输⼊参数:% hf -- 函数句柄,⽬标函数% x0 -- 实列向量,初始点% epsi -- 实标量,终⽌误差%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% exitflag -- 整型标量,等于0表⽰成功,等于-1表⽰失败(迭代次数⼤于iter_max) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20%%初始化%k = 0;rho = 0.01;l = 0.15;u = 0.85;x =x0;fv = hf(x);n = length(x);H = eye(n);iter_max = 100;%检查终⽌条件%g = grad(hf, x);while norm(g) > epsi && k<= iter_maxd = -H*g;lambda0 = 1.0;%%做线搜索,如果成功,则返回更新当前点%[fv, x, lambda, exitflag] = simplelinesearch(hf, rho, l, u, lambda0, fv, x, g, d); if exitflag == -1 %重开始H = eye(n);else%%更新H%g_old = g;g = grad(hf, x);p = lambda*d;q = g- g_old;Hq = H*q;pq = p'*q;qHq = q'*Hq;v = sqrt(qHq) * (p/pq-Hq/qHq);H = H + p*p'/pq - Hq*Hq'/qHq + v*v';endk = k+1;endexitflag = 0;if k > iter_maxexitflag = -1;endfunction [fv, x, exitflag] = phr(hf, cf, x0)%输⼊参数:% hf -- 函数句柄,⽬标函数% cf -- 函数句柄,约束条件,包含等式约束和不等式约束% x0 -- 实列向量,初始点%输出参数:% fv -- 实标量,⼀维搜索完成后的⽬标函数值,即 hf(x0+alpha*d)% x -- 实列向量,下⼀个点% exitflag -- 整型标量,等于0表⽰成功,等于-1表⽰失败(迭代次数⼤于iter_max) %参考⽂献:倪勤,最优化⽅法与程序设计,科学出版社% Date: 2009/12/20%%初始化%epsi = 1.0e-4;k = 0;sigma = 0.8;c = 1.5;theta = 0.8;x = x0;[ce, ci] = cf(x);l = length(ce);li = length(ci);lambda = ones(l+li, 1) * 0.1;iter_max = 100;phi = 0;if lphi = phi + ce'*ce;endif liphi = phi + sum(min(ci,lambda(l+1:end)/sigma).^2);endwhile phi > epsi && k <= iter_max%%hmf = @(x) mfun(x, hf, cf,lambda, sigma);[fv, x] = bfgs(hmf, x, epsi);[ce, ci] = cf(x);phi_old = phi;phi = 0;if lphi = phi + ce'*ce;endif liphi = phi + sum(min(ci,lambda(l+1:end)/sigma).^2); endif phi > epsi%%更新罚因⼦%if k >= 2 && phi/phi_old > thetasigma = c * sigma;end%%更新乘⼦%if llambda(1:l) = lambda(1:l) - sigma*ce;endif lilambda(l+1:end) = max(0, lambda(l+1:end) - sigma*ci); endendk = k+1;endexitflag = 0;fv = hf(x);exitflag = -1;end%%乘⼦罚函数%function fv = mfun(x, hf, cf, lambda, sigma)[ce, ci] = cf(x);l = length(ce);li = length(ci);fv = 0;fv = fv + hf(x);if lfv = fv - lambda(1:l)'*ce + 0.5*sigma*ce'*ce;endif lifv = fv + 0.5/sigma*sum(max(0,lambda(l+1:end) - sigma*ci).^2 - lambda(l+1:end).^2); end这⾥是演⽰代码:%% bfgs演⽰%教材P328.1-3hf1 = @(x) 100 * (x(2) - x(1).^2).^2 + (1 - x(1)).^2; %banana函数hf2 = @(x) (6 + x(1) + x(2)).^2 + (2 - 3*x(1) - 3*x(2) - x(1)*x(2)).^2;hf3 = @(x) x(1).^2 - 2*x(1)*x(2) + 4*x(2).^2 + x(1) - 3*x(2);[fv,x,exitflag]=bfgs(hf1,[0;0],0.001);fvxexitflag[fv,x,exitflag]=bfgs(hf2,[4;6],0.001);fvxexitflag[fv,x,exitflag]=bfgs(hf3,[1;1],0.001);fvexitflag%% phr算法%教材P414.5hf1 = @(x) x(1).^2 + x(2).^2;cf1 = @(x) deal([], x(1) - 1);hf2 = @(x) x(1) + (x(2) + 1).^2/3;cf2 = @(x) deal([],[x(1); x(2) - 1]);%教材P392.2hf3 = @(x) x(1).^2 + x(1).*x(2) + 2*x(2).^2 - 6*x(1) - 2*x(2) - 12*x(3);cf3 = @(x) deal(x(1)+x(2)+x(3)-2,...[x(1) - 2*x(2) + 3; x(1); x(2); x(3)]);%其它例⼦hf4 = @(x) 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2;cf4 = @(x) deal([3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875;x(1) - 0.3*x(2)],...[-x(1) + 0.2*x(2)*x(5) + 71-0.9*x(3) + x(4)^2 + 67x(3)x(5) - 1-x(3) + 20x(4) - 0.1*x(5)-x(4) + 0.5*x(5)x(3) - 0.9*x(5)]);hf5 = @(x) exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);cf5 = @(x) deal([], [x(1) + x(2) - x(1)*x(2) - 1.5; x(1)*x(2) + 10]);[fv, x, exitflag] = phr(hf1, cf1, [3;2]); fv x exitflag [fv, x, exitflag] = phr(hf2, cf2, [3;2]); fv x exitflag [fv, x, exitflag] =phr(hf3, cf3, [1;1;0]); fv x exitflag [fv, x, exitflag] = phr(hf4, cf4, [1; 4; 5; 2; 5]); fv x exitflag [fv, x, exitflag] = phr(hf5, cf5, [-1; 1]); fv x exitflag。
非线性整数规划的遗传算法Matlab程序(附图)通常,非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab 优化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出一个较为令人满意的解。
这时就需要针对问题设计专门的优化算法。
下面举一个遗传算法应用于非线性整数规划的编程实例,供大家参考!模型的形式和适应度函数定义如下:这是一个具有200个01决策变量的多目标非线性整数规划,编写优化的目标函数如下,其中将多目标转化为单目标采用简单的加权处理。
function Fitness=FITNESS(x,FARM,e,q,w)%% 适应度函数% 输入参数列表% x 决策变量构成的4×50的0-1矩阵% FARM 细胞结构存储的当前种群,它包含了个体x% e 4×50的系数矩阵% q 4×50的系数矩阵% w 1×50的系数矩阵%%gamma=0.98;N=length(FARM);%种群规模F1=zeros(1,N);F2=zeros(1,N);for i=1:Nxx=FARM{i};ppp=(1-xx)+(1-q).*xx;F1(i)=sum(w.*prod(ppp));F2(i)=sum(sum(e.*xx));endppp=(1-x)+(1-q).*x;f1=sum(w.*prod(ppp));f2=sum(sum(e.*x));Fitness=gamma*sum(min([sign(f1-F1);zeros(1,N)]))+(1-gamma)*sum(mi n([sign(f2-F2);zeros(1,N)]));针对问题设计的遗传算法如下,其中对模型约束的处理是重点考虑的地方function [Xp,LC1,LC2,LC3,LC4]=MYGA(M,N,Pm)%% 求解01整数规划的遗传算法%% 输入参数列表% M 遗传进化迭代次数% N 种群规模% Pm 变异概率%% 输出参数列表% Xp 最优个体% LC1 子目标1的收敛曲线% LC2 子目标2的收敛曲线% LC3 平均适应度函数的收敛曲线% LC4 最优适应度函数的收敛曲线%% 参考调用格式[Xp,LC1,LC2,LC3,LC4]=MYGA(50,40,0.3)%% 第一步:载入数据和变量初始化load eqw;%载入三个系数矩阵e,q,w%输出变量初始化Xp=zeros(4,50);LC1=zeros(1,M);LC2=zeros(1,M);LC3=zeros(1,M);LC4=zeros(1,M);Best=inf;%% 第二步:随机产生初始种群farm=cell(1,N);%用于存储种群的细胞结构k=0;while k %以下是一个合法个体的产生过程x=zeros(4,50);%x每一列的1的个数随机决定for i=1:50R=rand;Col=zeros(4,1);if R<0.7RP=randperm(4);%1的位置也是随机的Col(RP(1))=1;elseif R>0.9RP=randperm(4);Col(RP(1:2))=1;elseRP=randperm(4);Col(RP(1:3))=1;endx(:,i)=Col;end%下面是检查行和是否满足约束的过程,对于不满足约束的予以抛弃 Temp1=sum(x,2);Temp2=find(Temp1>20);if length(Temp2)==0k=k+1;farm{k}=x;endend%% 以下是进化迭代过程counter=0;%设置迭代计数器while counter%% 第三步:交叉%交叉采用双亲双子单点交叉newfarm=cell(1,2*N);%用于存储子代的细胞结构Ser=randperm(N);%两两随机配对的配对表A=farm{Ser(1)};%取出父代AB=farm{Ser(2)};%取出父代BP0=unidrnd(49);%随机选择交叉点a=[A(:,1:P0),B(:,(P0+1):end)];%产生子代ab=[B(:,1:P0),A(:,(P0+1):end)];%产生子代bnewfarm{2*N-1}=a;%加入子代种群newfarm{2*N}=b;%以下循环是重复上述过程for i=1:(N-1)A=farm{Ser(i)};B=farm{Ser(i+1)};P0=unidrnd(49);a=[A(:,1:P0),B(:,(P0+1):end)];b=[B(:,1:P0),A(:,(P0+1):end)];newfarm{2*i-1}=a;newfarm{2*i}=b;endFARM=[farm,newfarm];%新旧种群合并%% 第四步:选择复制FLAG=ones(1,3*N);%标志向量,对是否满足约束进行标记%以下过程是检测新个体是否满足约束for i=1:(3*N)x=FARM{i};sum1=sum(x,1);sum2=sum(x,2);flag1=find(sum1==0);flag2=find(sum1==4);flag3=find(sum2>20);if length(flag1)+length(flag2)+length(flag3)>0FLAG(i)=0;%如果不满足约束,用0加以标记endendNN=length(find(FLAG)==1);%满足约束的个体数目,它一定大于等于N NEWFARM=cell(1,NN);%以下过程是剔除不满主约束的个体kk=0;for i=1:(3*N)if FLAG(i)==1kk=kk+1;NEWFARM{kk}=FARM{i};endend%以下过程是计算并存储当前种群每个个体的适应值SYZ=zeros(1,NN);syz=zeros(1,N);for i=1:NNx=NEWFARM{i};SYZ(i)=FITNESS2(x,NEWFARM,e,q,w);%调用适应值子函数endk=0;%下面是选择复制,选择较优的N个个体复制到下一代while k minSYZ=min(SYZ);posSYZ=find(SYZ==minSYZ);POS=posSYZ(1);k=k+1;farm{k}=NEWFARM{POS};syz(k)=SYZ(POS);SYZ(POS)=inf;end%记录和更新,更新最优个体,记录收敛曲线的数据minsyz=min(syz);meansyz=mean(syz);pos=find(syz==minsyz);LC3(counter+1)=meansyz;if minsyz Best=minsyz;Xp=farm{pos(1)};endLC4(counter+1)=Best;ppp=(1-Xp)+(1-q).*Xp;LC1(counter+1)=sum(w.*prod(ppp));LC2(counter+1)=sum(sum(e.*Xp));%% 第五步:变异for i=1:Nif Pm>rand%是否变异由变异概率Pm控制AA=farm{i};%取出一个个体POS=unidrnd(50);%随机选择变异位R=rand;Col=zeros(4,1);if R<0.7RP=randperm(4);Col(RP(1))=1;elseif R>0.9RP=randperm(4);Col(RP(1:2))=1;elseRP=randperm(4);Col(RP(1:3))=1;end%下面是判断变异产生的新个体是否满足约束,如果不满足,此次变异无效 AA(:,POS)=Col;Temp1=sum(AA,2);Temp2=find(Temp1>20);if length(Temp2)==0farm{i}=AA;endendendcounter=counter+1end%第七步:绘收敛曲线图figure(1);plot(LC1);xlabel('迭代次数');ylabel('子目标1的值');title('子目标1的收敛曲线'); figure(2);plot(LC2);xlabel('迭代次数');ylabel('子目标2的值');title('子目标2的收敛曲线'); figure(3);plot(LC3);xlabel('迭代次数');ylabel('适应度函数的平均值');title('平均适应度函数的收敛曲线'); figure(4);plot(LC4);xlabel('迭代次数');ylabel('适应度函数的最优值');title('最优适应度函数的收敛曲线');贴出一幅运行得到的收敛曲线。
一.非线性规划课题实例1 表面积为36平方米的最大长方体体积。
建立数学模型:设x、y、z分别为长方体的三个棱长,f为长方体体积。
max f = x y (36-2 x y)/2 (x+y)实例2 投资决策问题某公司准备用5000万元用于A、B两个项目的投资,设x1、x2分别表示配给项目A、B的投资。
预计项目A、B的年收益分别为20%和16%。
同时,投资后总的风险损失将随着总投资和单位投资的增加而增加,已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资金,才能使期望的收益最大,同时使风险损失为最小。
建立数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0目标函数中的λ≥0是权重系数。
由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题。
非线性规划问题可分为无约束问题和有约束问题。
实例1为无约束问题,实例2为有约束问题。
二.无约束非线性规划问题:求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量用fminbnd,fminsearch,fminunc;多变量用fminsearch,fminnuc 1.fminunc函数调用格式:x=fminunc(fun,x0)x=fminunc(fun,x0,options)x=fminunc(fun,x0,options,P1,P2)[x,fval]=fminunc(…)[x,fval, exitflag]=fminunc(…)[x,fval, exitflag,output]=fminunc(…)[x,fval, exitflag,output,grad]=fminunc(…)[x,fval, exitflag,output,grad,hessian]=fminunc(…)说明:fun为需最小化的目标函数,x0为给定的搜索的初始点。
本科毕业论文(设计)论文题目:非线性规划问题的建模与Matlab求解实现的案例分析学生:许富豪学号:1204180137专业:信息与计算科学班级:计科1201指导教师:王培勋完成日期:2015年6月25日非线性规划问题的建模与Matlab求解实现的案例分析容摘要非线性规划问题通常极其抽象,并且求解计算极其复杂,本文举个别非线性规划问题案例,通过对抽象的非线性规划问题先建立数学模型,再利用Matlab软件高效快捷的实现非线性规划问题的求解,最后分析利用Matlab软件得出的案例结果。
关键词:非线性规划建立数学模型Matlab目录(三号黑体居中)空一行空一行一、※※※※※※ (1)(一)※※※※※※ (1)1.※※※※※※※※※※※※※ (1)2.※※※※※※※ (4)(二)※※※※ (7)(三)※※※※※※※※ (12)二、※※※※ (16)(一)※※※※※ (16)(二)※※※※※ (24)1.※※※※ (24)2.※※※※※ (30)3.※※※※ (31)(三)※※※※ (33)三、※※※※ (36)(一)※※※※※ (38)(二)※※※※ (43)四、※※※※ (45)参考文献 (48)附录 (50)(标题顺序号、容及其开始页码均为四号宋体,一级标题为黑体四号)序 言非线性规划问题通常难以用人力计算,所以我们一般利用Matlab 软件代替人去计算抽象的非线性规划问题,解决了耗费时间、耗费精力的问题,快速准确的得出计算结果。
因此,善于利用Matlab 实现非线性规划问题的求解非常重要,而求解非线性规划问题之前必须先对问题进行建立数学模型,才能准确的理解题意并快速的运用Matlab 求解。
一、非现性规划的基本概念(一)定义如果目标函数或约束条件中至少有一个是非线性函数,则最优化问题就叫做非线性规划问题,简记为NP 。
(二)一般形式min (),n f x x E ∈,()=0(=1,2,..()0(j=1,2i jh x j m s t g x l ⋯≤⎩⋯⎧⎨),,)其中:1,2,n =()Tx x x x ⋯称为模型(NP )的决策变量,f 称为目标函数,(=1,...,)i h i m 和(=1,...,)j g j l 称为约束函数;()=0(=1,...,)i h x i m 称为等式约束;()0(=1,...,)j g x j l ≤称为不等式约束。
一.非线性规划课题实例1 表面积为36平方米的最大长方体体积。
建立数学模型:设x、 y、 z分别为长方体的三个棱长, f为长方体体积。
max f = x y (36-2 x y)/2 (x+y)实例2 投资决策问题某公司准备用5000万元用于A、 B两个项目的投资, 设x1、 x2分别表示配给项目A、 B的投资。
预计项目A、 B的年收益分别为20%和16%。
同时, 投资后总的风险损失将随着总投资和单位投资的增加而增加, 已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资金, 才能使期望的收益最大, 同时使风险损失为最小。
建立数学模型:max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]s.t x1+x2≤5000x 1≥0,x2≥0目标函数中的λ≥0是权重系数。
由以上实例去掉实际背景, 其目标函数与约束条件至少有一处是非线性的, 称其为非线性问题。
非线性规划问题可分为无约束问题和有约束问题。
实例1为无约束问题, 实例2为有约束问题。
二.无约束非线性规划问题:求解无约束最优化问题的方法主要有两类: 直接搜索法(Search method)和梯度法(Gradient method), 单变量用fminbnd,fminsearch,fminunc;多变量用fminsearch,fminnuc1.fminunc函数调用格式: x=fminunc(fun,x0)x=fminunc(fun,x0,options)x=fminunc(fun,x0,options,P1,P2)[x,fval]=fminunc(…)[x,fval, exitflag]=fminunc(…) [x,fval, exitflag,output]=fminunc(…)[x,fval, exitflag,output,grad]=fminunc(…)[x,fval, exitflag,output,grad,hessian]=fminunc(…)说明: fun 为需最小化的目标函数, x0为给定的搜索的初始点。