完整word版matlab解非线性规划例题
matlab解决非线性规划问题(凸优化问题)

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 解法及其应用(一) 问题描述非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划是20世纪50年代才开始形成的一门新兴学科。
70年代又得到进一步的发展。
非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。
在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。
例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存 费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。
对于静态的最优化 问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。
具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划研究一个n 元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。
目标函数和约束条件都是线性函数的情形则属于线性规划。
本实验就是用matlab 软件来解决非线性规划问题。
(二) 基本要求掌握非线性规划的MATLAB 解法,并且解决相关的实际问题。
题一 :对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?题二: 某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.符号说明:z(x 1,x 2)表示总利润;p 1,q 1,x 1分别表示甲的价格、成本、销量; p 2,q 2,x 2分别表示乙的价格、成本、销量; a ij ,b i ,λi ,c i (i ,j =1,2)是待定系数.题三:设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.(三) 数据结构题一:设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-;建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5题二:总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,λ1=0.015,c1=20, r2=100,λ2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量x1,x2,使总利润z 最大.为简化模型,先忽略成本,并令a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2的极值. 显然其解为x1 = b1/2a11 = 50, x2 = b2/2a22 = 70,我们把它作为原问题的初始值.题三:设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i(四) 源程序题一:编写M 文件fun0.m:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval题二:建立M-文件fun.m:function f = fun(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1); y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2); f=-y1-y2;输入命令:x0=[50,70];x=fminunc(‘fun ’,x0),z=fun(x)题三:建立M 文件 fun44.m,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));建立M 文件mycon1.m 定义非线性约束:function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0主程序youh4.m 为:x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')(五) 运行结果题一:运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.题二:运行结果为:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5.题三:运行结果为:x1=86.2;x2=104.2;x3=126.2;x4=152.8;z=43.1(六) 相关知识用Matlab 解无约束优化问题一元函数无约束优化问题21),(m in x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
用Matlab解非线性规划问题[1]
![用Matlab解非线性规划问题[1]](https://img.taocdn.com/s3/m/fd26b4630b1c59eef8c7b409.png)
用Matlab 解无约束优化问题一元函数无约束优化问题21),(min x x x x f ≤≤常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)[x ,fval]= fminbnd (...)(4)[x ,fval ,exitflag]= fminbnd (...)(5)[x ,fval ,exitflag ,output]= fminbnd (...)其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
函数fminbnd 的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
例1 求x e f x sin 2-=在0<x<8中的最小值与最大值主程序为wliti1.m:f='2*exp(-x).*sin(x)';fplot(f,[0,8]); %作图语句[xmin,ymin]=fminbnd (f, 0,8)f1='-2*exp(-x).*sin(x)';[xmax,ymax]=fminbnd (f1, 0,8)运行结果:xmin = 3.9270 ymin = -0.0279xmax = 0.7854 ymax = 0.6448例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?先编写M 文件fun0.m 如下:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.2、多元函数无约束优化问题标准型为:min F(X)命令格式为:(1)x= fminunc (fun,X0 );或x=fminsearch (fun,X0 )(2)x= fminunc (fun,X0 ,options );或x=fminsearch (fun,X0 ,options )解 设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5(3)[x,fval]= fminunc(...);或[x,fval]= fminsearch(...)(4)[x,fval,exitflag]= fminunc(...);或[x,fval,exitflag]= fminsearch(5)[x,fval,exitflag,output]= fminunc(...);或[x,fval,exitflag,output]= fminsearch(...)说明:•fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:[1] fminunc为无约束优化提供了大型优化和中型优化算法。
MATLAB优化工具箱--线性规划-非线性规划

linprog输入参数说明: f, A, b, Aeq, beq lb,ub 边界设置 说明: 如果x(i)无边界,则 lb(i) = -inf, ub(i) = inf
6
linprog 输出参数说明: x 决策变量取值 fval 目标函数最优值
exitflag > 0 成功找到最优解 0 达到最大迭代次数也没有找到最优解 < 0 该线性规划问题不可行或者linprog计
10
fmincon函数求解形如下面的有约束非线性规 划模型
一般形式:
min f ( X ) s.t. AX b
Aeq X beq l X u c(X ) 0 ceq ( X ) 0
Matlab求解有约束非线性最小化 1.约束中可以有等式约束 2.可以含线性、非线性约束均可
数学实验
输入参数语法:
例子:某农场种植两种作物A、B,需要甲、乙两种化肥。种植 每亩作物A和作物B分别需用的化肥数,可得利润及农场现有化
肥数量如下表所示:
问在现有条件下,如何安排种植,才能使利润最大?
作物
每亩所需化肥 (百公斤)
现有化肥
AB (百公斤)
化肥
甲
23
100) 6 4
数学实验
例题建模
[x,fval,exitflag,output,lambda]=fmincon(fun,x0,...)
数学实验
输入参数的几点说明
模型中如果没有A,b,Aeq,beq,lb,ub的限制,则以空矩阵[ ]作为 参数传入; nonlcon:如果包含非线性等式或不等式约束,则将这些函数
编写为一个Matlab函数, nonlcon就是定义这些函数的程序文件名;
3
(完整word版)数学应用软件作业5用MATLAB求解非线性规划问题

佛山科学技术学院上 机 报 告课程名称 数学应用软件上机项目 用MATLAB 求解非线性规划问题专业班级 姓 名 学 号一。
上机目的1.了解非线性规划的基本理论知识。
2.对比Matlab 求解线性规划,学习用Matlab 求解非线性规划的问题。
二。
上机内容1、用quadprog 求解二次规划问题min f (x):2、求解优化问题:min 321)(x x x x f -=S 。
T.72220321≤++≤x x x注:取初值为(10,10,10)。
3、求表面积为常数150 m 2的体积最大的长方体体积及各边长。
注:取初值为(4,5,6)。
三.上机方法与步骤1、可用两种方法解题:方法一:Matlab程序:H=[1 -1;—1 2];c=[—2;—6];A=[1 1;-1 2;2 1];b=[2;2;3];Aeq=[];beq=[];vlb=[0;0];vub=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,vlb,vub)方法二:Matlab程序如下:先建立fun.m文件,程序为:function f=fun(x);f=1/2*x(1)^2+x(2)^2—x(1)*x(2)—2^x(1)-6*x(2);再建立chushi。
m文件,程序为:x0=[1;1];A=[1 1;—1 2;2 1];b=[2;2;3];Aeq=[];beq=[];vlb=[0;0];vub=[];[x,fval]=fmincon(’fun',x0,A,b,Aeq,beq,vlb,vub)2、Matlab程序:先建立fun1.m文件,程序为:function f=fun1(x);f=-x(1)*x(2)*x(3);再建立chushi1.m文件,程序为:x0=[10;10;10];A=[1 2 2;—1 —2 -2];b=[72;0];Aeq=[];beq=[];vlb=[];vub=[];[x,fval]=fmincon(’fun1',x0,A,b,Aeq,beq,vlb,vub)3、假设长方形的长、宽、高分别为(1)x 、(2)x 、(3)x ,则长方形的体积为f ,则有max (1)(2)(3)2(1)(2)2(1)(3)3(2)(3)150.()0(1,2,3)f x x x x x x x x x s t x i i =++=⎧⎨≥=⎩四.上机结果1、结果:(1)方法一结果:x =0。
MATLAB线性规划非线性规划

解 编写M文件xxgh1.m如下: c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6]; A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08]; b=[850;700;100;900];
返 回
解答
线性规划模型的一般形式
目标函数和所有的约束条件都是设计变量 的线性函数.
min u ci xi
i 1
n
n aik xk bi , i 1, 2,..., n. s.t. k 1 x 0, i 1, 2,..., n. i
矩阵形式: min u cx Ax b s.t. vlb x vub
Aeq=[]; beq=[];
vlb=[0;0;0;0;0;0]; vub=[];
To MATLAB (xxgh1)
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
例2
min z 6x1 3x2 4x3 s.t. x1 x2 x3 120 x1 30 0 x2 50 x3 20
编写M文件xxgh3.m如下: f = [13 9 10 11 12 8]; A = [0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3]; b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; To MATLAB (xxgh3) beq=[400 600 500]; vlb = zeros(6,1); vub=[]; [x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)
MATLAB非线性规划问题

一.非线性规划课题实例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非线性规划问题样本

一.非线性规划课题实例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为给定的搜索的初始点。
非线性规划matlab求解

在matlab 中非线性规划的数学模型可写成一下形式:minf(X)s.t. Ax ≪B Aeq .x =Beq C (x )≪0Ceq x =0其中,f(x)是标量函数;A,B,Aeq,Beq 是相应维数的矩阵和向量;C(x),Ceq(x)是非线性向量函数。
Matlab 中的命令是X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)它的返回值是向量x 。
其中,FUN 是用M 文件定义的函数f(x)。
X0是X 的初始值。
A ,B ,Aeq ,Beq 定义了线性约束AX ≪B ,Aeq*X=Beq ,如果没有线性约束,则A=[],B=[],Aeq=[],Beq=[]。
LB 和UB 是变量x 的下界和上界,如果上界和下界没有约束,则LB=[],UB=[];如果X 无下界,则LB=-inf;如果X 无上界,则UB=inf 。
NONLCON 是用M 文件定义的非线性向量函数C(x),Ceq(x)。
OPTIONS 定义了优化函数,可以使用MATLAB 默认的参数设置。
例求解下列非线性规划问题:max z= X 1+ X 2+ X 3+ X 4 s.t.x 1≪4001.1x 1+x 2≪4401.21x 1+1.1x 2+x 3≪4841.331x 1+1.21x 2+1.1x 3+x 4≪532.4X i≫0,i =1,2,3,4(1)编写M 文件,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)) );(2)编写M 文件,定义约束条件function[g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0(3)编写主程序x0=[1;1;1;1];lb=[0;0;0;0];ub=[];A=[];b=[];Aeq=[];beq=[];[x,fval] = fmincon('fun44',x0,A,b,Aeq,beq,lb,ub,'mycon1')输出结果x =86.1883104.2879 126.1883 152.6879fval =-43.0860。
利用二层规划算法求解非线性问题(matlab)

利用二层规划算法求解非线性问题(matlab)(粒子群、遗传算法二层规划)1. 问题示例2. 约束处理对约束条件的处理主要是用了罚函数的方法。
3. 效果图:test.m select.m pso.m mutation.m 附录(代码):genetic.m ga_fitfun1.m fitfun2.m fitfun1.m decode.mcross.m code.m代码有如上图附录所示11个文件,分别对应下面的code1-code11。
将code1-code11的代码分别保存为.m文件,名字为对应括号中的名字。
Code 1(code.m)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function ret = code(lenchrom, bound)% 本函数将变量编码成染色体,用于随机初始化一个种群% lenchrom input : 染色体长度% bound input : 变量的取值范围% ret output: 染色体的编码值flag = 0;while flag == 0pick = rand(1,length(lenchrom));ret = bound(:,1)' + (bound(:,2) - bound(:,1))'.*pick; % 线性插值,编码结果以实数向量存入ret中flag = test(lenchrom,bound,ret); % 检验染色体的可行性endCode 2(cross.m)function ret = cross(pcross, lenchrom, chrom, sizepop, bound)% 本函数完成交叉操作% pcorss input : 交叉概率% lenchrom input : 染色体的长度% chrom input : 染色体群% sizepop input : 种群规模% ret output : 交叉后的染色体for i = 1:sizepop % 每一轮for循环中,可能会进行一次交叉操作,染色体是随机选择的,交叉位置也是随机选择的,% 但该轮for循环中是否进行交叉操作则由交叉概率决定(continue控制)% 随机选择两个染色体进行交叉pick = rand(1,2);while prod(pick) == 0pick = rand(1,2);endindex = ceil(pick.*sizepop);% 交叉概率决定是否进行交叉pick = rand;while pick == 0pick = rand;endif pick > pcrosscontinue;endflag = 0;while flag == 0% 随机选择交叉位pick = rand;while pick == 0pick = rand;endpos = ceil(pick.*sum(lenchrom));% 随机选择进行交叉的位置,即选择第几个变量进行交叉,注意:两个染色体交叉的位置相同pick = rand; % 交叉开始v1 = chrom(index(1), pos);v2 = chrom(index(2),pos);chrom(index(1), pos) = pick*v2 + (1 - pick)*v1;chrom(index(2), pos) = pick*v1 + (1 - pick)*v2; % 交叉结束flag1 = test(lenchrom, bound, chrom(index(1),:)); % 检验染色体1的可行性flag2 = test(lenchrom, bound, chrom(index(2),:)); % 检验染色体2的可行性if flag1 * flag2 == 0flag = 0;elseflag = 1;end% 如果两个染色体不是都可行,则重新交叉endendret = chrom;Code 3(decode.m)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function ret=Decode(lenchrom,bound,code,opts)% 本函数对染色体进行解码% lenchrom input : 染色体长度% bound input : 变量取值范围% code input : 编码值% opts input : 解码方法标签% ret output: 染色体的解码值switch optscase 'binary'% binary codingfor i = length(lenchrom):-1:1data(i) = bitand(code, 2^lenchrom(i) - 1); % 并低十位,然后将低十位转换成十进制数存在data(i)里面code = (code-data(i))/(2^lenchrom(i)); % 低十位清零,然后右移十位endret = bound(:,1)' + data./(2.^lenchrom-1).*(bound(:,2) - bound(:,1))';%分段解码,以实数向量的形式存入ret中case 'grey' % grey codingfor i = sum(lenchrom):-1:2code = bitset(code, i - 1, bitxor(bitget(code,i), bitget(code,i - 1)));endfor i = length(lenchrom):-1:1data(i) = bitand(code, 2^lenchrom(i) - 1);code = (code - data(i))/(2^lenchrom(i));endret = bound(:,1)' + data./(2.^lenchrom - 1).*(bound(:,2) - bound(:,1))';%分段解码,以实数向量的形式存入ret中case 'float' % float codingret = code; % 解码结果就是编码结果(实数向量),存入ret中endCode 4(fitfun1.m)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y = fitfun1(x, penalty_num)x1 = x(1);x2 = x(2);y1 = x(3);y2 = x(4);% 公式1 - 顶层公式y = -x1^2 - 3*x2 - 4 * y1 + y2^2;% 约束条件测试if x1 < 0 | x2 < 0 | y1 < 0 | y2 < 0y = y + (min([x1, x2, y1, y2])).^2 * penalty_num; % 惩罚系数return;endif x2 + 3 * y1 - 4 * y2 < 4y = y + (4 - (x2 + 3 * y1 - 4 * y2)).^2 * penalty_num; % 惩罚系数return;endif (x1^2 + 2 * x2) > 4y = y + ((x1^2 + 2 * x2) - 4).^2 * penalty_num; % 惩罚系数return;endCode 5(fitfun2.m)function y = fitfun2(x, penalty_num)x1 = x(1);x2 = x(2);y1 = x(3);y2 = x(4);% 第2个公式y = 2 * x1^2 + y1^2 - 5 * y2;% - 检查约束条件if x1 < 0 | x2 < 0 | y1 < 0 | y2 < 0y = y + (min([x1, x2, y1, y2])).^2 * penalty_num; % 惩罚系数return;endif x2 + 3 * y1 - 4 * y2 < 4y = y + (4 - (x2 + 3 * y1 - 4 * y2)).^2 * penalty_num; % 惩罚系数return;endif (x1^2 + 2 * x2) > 4y = y + ((x1^2 + 2 * x2) - 4).^2 * penalty_num; % 惩罚系数return;endCode 6(ga_fitfun1.m)function [y, x_best_pso] = ga_fitfun2(x, penalty_num, limition_min, limition_max)[y2, x_best_pso] = pso(x, penalty_num, limition_min, limition_max); % 粒子算法进行计算并且获得优化后的x 和适应度y2% 按第一层公式进行评价y = fitfun1(x_best_pso, penalty_num);Code 7(genetic.m)% 清空环境变量clcclearclose all;% 遗传算法参数初始化maxgen = 10; % 进化代数,即迭代次数sizepop = 50; % 种群规模pcross = 0.2; % 交叉概率选择,0和1之间pmutation = 0.1; % 变异概率选择,0和1之间limition_max = 100; % 数值变化范围的最大值limition_min = 0; % 数值变化范围的最小值penalty_num = 1e10; % 惩罚系数numsum = 4; % 自变量总数% - 用global 变量来初始化一个最糟糕的初始化粒子个体来做全局最佳粒子个体global zbest;zbest = zeros(1, numsum) - 1; % 约束条件是: 4 个自变量都大于0, 为了违背都赋值为"- 1";global fitnesszbest;fitnesszbest = 100*penalty_num;% ------------------------lenchrom = ones(1,numsum);bound = [limition_min*ones(numsum,1), limition_max*ones(numsum,1)]; %数据范围%------------------------------------------------------种群初始化--------------------------------------------------------individuals = struct('fitness', zeros(1,sizepop), 'chrom',[]); % 将种群信息定义为一个结构体avgfitness = []; % 每一代种群的平均适应度bestfitness = []; % 每一代种群的最佳适应度bestchrom = []; % 适应度最好的染色体fprintf(['开始初始化\n']);% 初始化种群for i = 1:sizepop% 随机产生一个种群individuals.chrom(i,:) = code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量)x = individuals.chrom(i,:);% 计算适应度[individuals.fitness(i), x_best_pso] = ga_fitfun1(x, penalty_num, limition_min, limition_max); % 染色体的适应度individuals.chrom(i,:) = x_best_pso;end% 找最好的染色体[bestfitness, bestindex] = min(individuals.fitness);bestchrom = individuals.chrom(bestindex,:); % 最好的染色体avgfitness = sum(individuals.fitness)/sizepop; % 染色体的平均适应度% 记录每一代进化中最好的适应度和平均适应度trace_ga = [avgfitness, bestfitness];trace_pso = [fitnesszbest];% 迭代求解最佳初始阀值和权值% 进化开始fprintf(['开始进化\n']);for i = 1:maxgen% 选择individuals = select(individuals,sizepop);avgfitness = sum(individuals.fitness)/sizepop;% 交叉individuals.chrom = cross(pcross, lenchrom, individuals. chrom, sizepop, bound);% 变异individuals.chrom = mutation(pmutation, lenchrom, individuals. chrom, sizepop, i, maxgen, bound);% 计算适应度for j = 1:sizepopx = individuals.chrom(j,:); % 解码[individuals.fitness(j), x_best_pso] = ga_fitfun1(x, penalty_num, limition_min, limition_max);individuals.chrom(j,:) = x_best_pso;end% 找到最小和最大适应度的染色体及它们在种群中的位置[newbestfitness, newbestindex] = min(individuals.fitness);[worestfitness, worestindex] = max(individuals.fitness);% 代替上一次进化中最好的染色体if bestfitness > newbestfitnessbestfitness = newbestfitness;bestchrom = individuals.chrom(newbestindex,:);endindividuals.chrom(worestindex,:) = bestchrom;individuals.fitness(worestindex) = bestfitness;avgfitness = sum(individuals.fitness)/sizepop;trace_ga = [trace_ga; avgfitness, bestfitness]; % 记录每一代进化中最好的适应度和平均适应度- 遗传算法trace_pso = [trace_pso; fitnesszbest];fprintf(['遗传进化了', num2str(i), '代\n']);end% 遗传算法结果显示figure(1);[r_ga, c_ga] = size(trace_ga);plot([1:r_ga]', trace_ga(:,2), 'r-*');title(['遗传算法适应度曲线' '终止代数=' num2str(maxgen)]); xlabel('进化代数'); ylabel('适应度');legend('遗传算法最佳适应度');grid on;print(gcf, '-dpng', '遗传算法最佳适应度变化.png', '-r300');% 粒子算法结果显示figure(2)[r_pso, c_pso] = size(trace_pso);plot([1:r_pso]', trace_pso, 'r-*');title(['粒子算法适应度曲线' '终止代数=' num2str(maxgen)]); xlabel('进化代数'); ylabel('适应度');legend('粒子算法最佳适应度');grid on;print(gcf, '-dpng', '粒子算法最佳适应度变化.png', '-r300');% - 存储最佳结果x = bestchrom;dos('del Result.xls');xlswrite('Result.xls', [{'x1', 'x2', 'y1', 'y2', '公式1结果', '公式2结果'}; num2cell([x, fitfun1(x, penalty_num), fitfun2(x, penalty_num)])]);Code 8(mutation.m)function ret = mutation(pmutation, lenchrom, chrom, sizepop, num, maxgen, bound)% 本函数完成变异操作% pcorss input : 变异概率% lenchrom input : 染色体长度% chrom input : 染色体群% sizepop input : 种群规模% opts input : 变异方法的选择% pop input : 当前种群的进化代数和最大的进化代数信息% bound input : 每个个体的上届和下届% maxgen input : 最大迭代次数% num input : 当前迭代次数% ret output : 变异后的染色体for i = 1:sizepop% 每一轮for循环中,可能会进行一次变异操作,染色体是随机选择的,变异位置也是随机选择的,% 但该轮for循环中是否进行变异操作则由变异概率决定(continue控制)% 随机选择一个染色体进行变异pick = rand;while pick == 0pick = rand;endindex = ceil(pick*sizepop);% 变异概率决定该轮循环是否进行变异pick = rand;if pick > pmutationcontinue;endflag = 0;while flag == 0% 变异位置pick = rand;while pick == 0pick = rand;endpos = ceil(pick * sum(lenchrom)); % 随机选择了染色体变异的位置,即选择了第pos个变量进行变异pick = rand; % 变异开始fg = (rand*(1 - num/maxgen))^2;if pick > 0.5chrom(i, pos) = chrom(i, pos) + (bound(pos, 2) - chrom(i,pos))*fg;elsechrom(i,pos) = chrom(i, pos) - (chrom(i, pos) - bound(pos,1))*fg;end% 变异结束flag = test(lenchrom, bound, chrom(i,:)); % 检验染色体的可行性endendret = chrom;Code 9(pso.m)function [y, x_best] = pso(x, penalty_num, limition_min, limition_max)% 参数初始化% 粒子群算法中的两个参数c1 = 1.49445;c2 = 1.49445;maxgen = 100; % 进化次数sizepop = 50; % 种群规模pop_len = length(x); % 粒子个体长度Vmax = 1*limition_max;Vmin = -1*limition_max;popmax = limition_max;popmin = limition_min;pop = [];V = [];fitness = [];for i = 1:sizepop%pop(i,:) = 10*rand(1,4);pop(i,:) = x;V(i,:) = rand(1,4);fitness(i) = fitfun2(pop(i,:), penalty_num);end% 个体极值和群体极值global zbest; % 通过全局变量评比确保公式2获得最小值global fitnesszbest;[bestfitness, bestindex] = min(fitness);if bestfitness < fitnesszbestzbest = pop(bestindex,:); % 全局最佳fitnesszbest = bestfitness; % 全局最佳适应度值endgbest = pop; % 个体最佳fitnessgbest = fitness; % 个体最佳适应度值% 迭代寻优% fprintf(['粒子算法进化了: ']);for i = 1:maxgenfor j = 1:sizepop% 速度更新V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));V(j,find(V(j,:) > Vmax)) = Vmax;V(j,find(V(j,:) < Vmin)) = Vmin;% 种群更新pop(j,:) = pop(j,:) + 0.2*V(j,:);pop(j,find(pop(j,:) > popmax)) = popmax;pop(j,find(pop(j,:) < popmin)) = popmin;% 自适应变异pos = unidrnd(pop_len);if rand > 0.95pop(j,pos) = popmin + rand(1,1)*(popmax - popmin);end% 适应度值fitness(j) = fitfun2(pop(j,:), penalty_num);endfor j = 1:sizepop% 个体最优更新if fitness(j) < fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end%群体最优更新if fitness(j) < fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endendyy(i) = fitnesszbest;%fprintf([num2str(i), ',']);end% fprintf(['\n']);% - 结果分析% plot(yy)% title(['适应度曲线' '终止代数=' num2str(maxgen)]); % xlabel('进化代数');ylabel('适应度');x_best = zbest;y = yy(end);Code 10(select.m)function ret = select(individuals, sizepop)% 本函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异% individuals input : 种群信息% sizepop input : 种群规模% ret output : 经过选择后的种群%根据个体适应度值进行排序fitness1 = 10./individuals.fitness;sumfitness = sum(fitness1);sumf = fitness1./sumfitness;index = [];for i = 1:sizepop %转sizepop次轮盘pick = rand;while pick == 0pick = rand;endfor j = 1:sizepop% pick=pick-sumf(i);pick = pick - sumf(j);if pick < 0index = [index, j];break; % 寻找落入的区间,此次转轮盘选中了染色体i% 注意:在转sizepop次轮盘的过程中,有可能会重复选择某些染色体endendendindividuals.chrom = individuals.chrom(index,:);individuals.fitness = individuals.fitness(index);ret = individuals;Code 11(test.m)function flag = test(lenchrom, bound, code)% lenchrom input : 染色体长度% bound input : 变量的取值范围% code output: 染色体的编码值x = code; %先解码flag = 1;% if(x(1)<0)&&(x(2)<0)&&(x(3)<0)&&(x(1)>bound(1,2))&&(x(2)>bound(2,2))&&(x(3)>bound(3, 2))% flag=0;% end。
(完整word版)用matlab解决线性规划问题的几道题

一、用MATLAB 求解线性规划问题(1)编写的M 文件为:f=[-1;-1]A=[1 -2;1 2]b=[4,8][x,feval]=linprog(f,A,b,[],[],zeros(2,1))所求解为:x 1=6,x 2=1;min f=-7(2) 编写的M 文件为:f=[-4;-3]A=[3 4;3 3;4 2]b=[12;10;8][x,feval]=linprog(f,A,b,[],[],zeros(1,2))所求得的解为:x 1=0.8,x 2=2.4;max f=10.4(3)(4) 编写的M 文件为:f=[-1;-3;3]Aeq=[1 1 2;-1 2 1]beq=[4;4][x,feval]=linprog(f,[],[],Aeq,beq,zeros(3,1))所求得的结果为:x 1=4/3,x 2=8/3,x 3=0;max f=28/3。
12121212min 24s.t.28,0f x x x x x x x x ì=--ïïïï-?镲íï+?ïïï³ïî121212121243max 3412..3310428,0f x x xx s t x x x x x x ì=+ïïïï+?ïïï+?íïïï+?ïïï³ïî12312312313min 3s.t.211423210(1,2,3)j f x x x x x xx xx x x x j =--ìïïïï-+?ïïïï-++?íïï-+=ïïïïï?ïî123123123max 3s.t.24240(1,2,3)j f x x x xx x x x x x j =+-ìïïïï++=ïïí-++=ïïïïï?ïî(5)(选做)先做如下转化:% x=u1-v1,,y=u2-v2,,z=u3-v3% min f=u1+u2+u3+v1+v2+v3% s.t. u1+u2-v1-v2<=1% 2*u1+u3-2*v1-v3=3则编写的M 文件为:f=[1;1;1;1;1;1]A=[1 1 0 -1 -1 0]b=1Aeq=[2 0 1 -2 0 -1]beq=3[x,feval]=linprog(f,A,b,Aeq,beq,zeros(6,1))所求得的结果为:u 1=1.0936,u 2=0,u 3=0.8192,v 1=0,v 2=0.9302,v 3=0Min f =2。
用MATLAB优化工具包解非线性规划

用MATLAB优化工具包解非线性规划2.8 用MATLAB优化工具包解非线性规划用MATLAB优化工具包求解非线性规划时必须先化为如下形式:(NLP)求解程序名为fmincon,其最简单的调用格式为:x = fmincon('fun',x0,A1,b1) (用于不含有等式约束和上下解约束的问题)其最复杂的调用格式为:[x,fval,exitflag,output,lambda,grad,hessian] =fmincon('fun',x0,A1,b1,A2,b2,v1,v2,'nlcon',options,P1,P2, ...)2.8.1 程序fmincon输出变量其中输出变量的含义为:1)x :最优解2)fval :最优解处的函数值3)exitflag :程序结束时的状态指示:>0:收敛0:函数调用次数或迭代次数达到最大值(该值在options中指定)<0:不收敛4) Output: 包含以下数据的一个结构变量funcCount 函数调用次数iterations 实际迭代次数cgiterations 实际PCG迭代次数(大规模计算用)algorithm 实际使用的算法stepsize 最后迭代步长(中等规模计算用)firstorderopt 一阶最优条件满足的情况(目标函数梯度的范数)5) lambda: 包含以下数据(LAGRANGE乘子)的一个结构变量,总维数等于约束条件的个数,其非零分量对应于起作用的约束条件:ineqlin 不等式约束的LAGRANGE乘子eqlin 等式约束的LAGRANGE乘子upper 上界约束的LAGRANGE乘子lower 下界约束的LAGRANGE乘子6) grad: 目标函数梯度7) hessian: 目标函数的hessian矩阵2.8.2 程序fmincon输入参数其中输入变量的含义为:x0为初始解(缺省时程序自动取x0=0)A1,b1,A2,b2,v1,v2:含义见模型(NLP)Fun.m给出目标函数,当GradObj='on'时必须给出其梯度,当Hessian='on'时还必须给出其Jacobi矩阵,一般形式为function [f,g,H] = fun(x)f = ... % objective function valueif nargout > 1g = ... % gradient of the functionif nargout > 2H = ... % Hessian of the functionendnlcon.m给出非线性约束,GradConstr='on'时还给出梯度,一般形式为function [c1,c2,GC1,GC2] = nlcon(x)c1 = ... % nonlinear inequalities at xc2 = ... % nonlinear equalities at xif nargout > 2GC1 = ... % gradients of c1GC2 = ... % gradients of c2endoptions:包含算法控制参数的结构设定(或显示)控制参数的命令为Optimset,有以下一些用法:Optimset //显示控制参数optimset optfun //显示程序'optfun'的控制参数opt=optimset //控制参数设为[](即缺省值opt=optimset(optfun)// 设定为程序'optfun'的控制参数缺省值Opt=optimset('par1',val1,'par2',val2,...)Opt=optimset(oldopts,'par1',val1,...)opt=optimset(oldopts,newopts)可以设定的参数比较多,对fmincon,常用的有以下一些参数:Diagnostics 是否显示诊断信息('on' 或'off')Display 显示信息的级别('off' ,'iter' ,'final','notify')LargeScale 是否采用大规模算法('on' 或'off')MaxIter 最大迭代次数TolCon 约束的误差限TolFun 函数计算的误差限TolX 决策变量的误差限GradObj 目标函数是否采用分析梯度('on' ,'off')Jacobian 目标函数是否采用分析Jacob矩阵('on' ,'off')MaxFunEvals 目标函数最大调用次数GradConstr 非线性约束函数是否采用分析梯度('on' ,'off')2.8.3 注意事项fmincon中输出变量、输入参数不一定写全,可以缺省。
(完整word版)matlab解非线性规划例题

关于非线性规划问题背景:线性规划问题,即目标函数和约束条件都是线性函数的规划问题,但在实际工作中,还常常会遇到另一类更一般的规划问题,即目标函数和约束条件中至少有一个是非线性函数问题,即非线性规划问题.求解方法:Matlab软件问题:某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货50台、70台、90台。
每季度的生产费用为()^2=+(元),f x ax bx其中x是该季度生产的台数,若交货有剩余可用于下季度交货,但需支付存储费,每季度每台c元。
已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a=50,b=0。
2,c=4,问工厂如何安排每月生产计划,才能既满足合同又使总费用最低(包括生产费用和库存费用)。
问题分析与假设:目标函数是总费用,记为()F x.约束条件是生产合同和生产能力的限制.设第一季度生产1x台,第二季度生产2x台,则第三季度生产(21012)--台。
则:x x≤+≤x x12012210≤≤x501100≤≤x02100由a=50,b=0.2,c=4,第一季度生产费用15010.21^2=+,T x x剩余品存储到下一季度的费用14(150)=-,k x同理可得:25020.22^2T x x=+=+-24(12120)k x x350(21012)0.2(21012)^2=--+--T x x x x建模总费用=++++=+++--++-先建立M-文件: F x T T T k k x x x x x x()12312103000.2(1^22^2)0.2(21012)^24(212120)a=50;b=0.2;c=4;H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a];A1=[-1,0,0;—1,-1,0];b1=[-50,—120]';A2=[1 1 1];b2=210;v1=[0 0 0]';v2=[100 100 100]’;[x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2,[])X2=x'*H*x/2+C*x-140*c再建立主程序:a=50;b=0。
工程优化 6-解非线性规划的MATLAB指令

练习:利用Matlab求解下列最优化问题
( 1)
1 2 1 2 min f x1 2 x2 x1 x2 2 2 2x1+3x2 6 s.t x1+4x2 5 x1,x2 0
2 2 (2) min f ( x ) e x1 (4 x1 2 x2 4 x1 x2 2 x2 1)
(4) 若修改主程序gying2.m, 取初值为上面的计算结果:
x0=[ 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000 10.0707 6.3875 4.3943 5.7511 7.1867]’
得结果为:
x=[3.0000 5.0000 0.3094 7.0000 0.0108 0.6798 0 0 3.6906 0 5.9892 10.3202 5.5369 4.9194 5.8291 7.2852]’ fval =103.4760 exitflag = 1 总的吨千米数比上面结果略优. (5) 若再取刚得出的结果为初值, 却计算不出最优解.
(6) 若取初值为: x0=[3 5 4 7 1 0 0 0 0 0 5 11 5.6348 4.8687 7.2479 7.7499]', 则计算结果为: x=[3.0000 5.0000 4.0000 7.0000 1.0000 0 0 0 0 0 5.0000 11.0000 5.6959 4.9285 7.2500 7.7500]’ fval =89.8835 exitflag = 1 总的吨千米数89.8835比上面结果更好.
小结:用Matlab求解非线性规划问题,基本步骤:
1. 首先建立M文件fun.m,定义目标函数 f(x): function f=fun(x); f= f(x); 2.若约束条件中有非线性约束:g(x) 0
数学建模_非线性规划模型用MATLAB++LINGO

近似规划法的算法步骤如下
1 1 1 , x1 (1) 给定初始可行点 X 1 x1 2 ,, xn ,步长限制 j j 1,, n ,
步长缩小系数 0,1,允许误差 ,令 k=1;
(2)
在点 X k 处,将 f X , g i X , h j X 按泰勒级数展开并
2 2 min 0 , g X M h X i j i 1 j 1
(2)
将问题( 1 )转化为无约束问题: min T X , M n
X E
(3)
其中T(X,M)称为罚函数,M称为罚因子,带M的项称为罚项,这 里的罚函数只对不满足约束条件的点实行惩罚:当 X 足各 gi X 0, hi X 0 ,故罚项=0,不受惩罚.当 X D 时, gi X 0或hi X 0 的约束条件,故罚项>0,要受惩罚. 必有
2
min f(x1,x2)=-2x1-6x2+x12-2x1x2+2x22 s.t. x1+x2≤2 -x1+2x2≤2 x1≥0, x2≥0 T x 1 - 1 1 2 x1 1、写成标准形式:min z ( x , x )
简称为SUMT法.其一为SUMT外点法,其
二为SUMT内点法.
SUTM外点法
对一般的非线性规划: min f X
gi X 0 s.t. h j X 0
m
i 1,2,..., m; j 1,2,...,l.
l
(1)
可设:T X , M f X M
4
解(1)(2)(3)(4),得
1 1 x 2 4 ,3 6 20
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于非线性规划问题
背景:
线性规划问题,即目标函数和约束条件都是线性函数的规划问题,但在实际工作中,还常常会遇到另一类更一般的规划问题,即目标函数和约束条件中至少有一个是非线性函数问题,即非线性规划问题。
求解方法:Matlab软件
问题:
某厂向用户提供发动机,合同规定,第一、二、三季度末分别f(x)?ax?bx^2(元)交货50台、70台、90台。
,每季度的生产费用为x是该季度生产的台数,若交货有剩余可用于下季度交货,但需其中c元。
已知工厂每季度最大生产能力为100支付存储费,每季度每台bca=4,问工厂如何安排每台,第一季度开始时无存货,设=0.2,=50,月生产计划,才能既满足合同又使总费用最低(包括生产费用和库存费用)。
问题分析与假设:
F(x)。
目标函数是总费用,记为约束条件是生产合同和生产能力的限制。
x1x2台,则第三季度生产台,第二季度生产设第一季度生产(210?x1?x2)台。
则:
120?x1?x2?210
50?x1?1000?x2?100
bca=4,
=0.2,=50,由.
T1?50x1?0.2x1^2,第一季度生产费用
k1?4(x1?50),剩余品存储到下一季度的费用
T2?50x2?0.2x2^2同理可得:
k2?4(x1?x2?120)
T3?50(210?x1?x2)?0.2(210?x1?x2)^2
建模
总费用
F(x)?T1?T2?T3?k1?k2?10300?0.2(x1^2?x2^2)?0.2(210?x1?x2)^2?4(2x1?x2?120)先建立M-文件: a=50;b=0.2;c=4;
H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a];
A1=[-1,0,0;-1,-1,0];b1=[-50,-120]';
A2=[1 1 1];b2=210;
v1=[0 0 0]';v2=[100 100 100]';
[x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2,[])
X2=x'*H*x/2+C*x-140*c
再建立主程序:
a=50;b=0.2;c=4;
H=diag(2*b*ones(1,3));C=[a+2*c,a+c,a];
A1=[-1,0,0;-1,-1,0];b1=[-50,-100]';
A2=[1 1 1];b2=210;
v1=[0 0 0]';v2=[100 100 100]';
[x,faval,exitflag,output,lambada]=quadprog(H,C,A1,b1,A2,b2,v1,v2,[]) X2=x'*H*x/2+C*x-140*c
运算结果:
x =
60.0000
70.0000
80.0000
faval =
1.4240e+004
exitflag =
1
output =
iterations: 1
constrviolation: -10.0000
algorithm: 'medium-scale: active-set' firstorderopt: 4.2633e-014
cgiterations: []
message: 'Optimization terminated.' lambada =
lower: [3x1 double]
upper: [3x1 double]
eqlin: -82
ineqlin: [2x1 double]
X2 =
1.3680e+004
结果
费用总量最低生产方案:三个季度分别生产60,70,80台。