非线性规划求解方法:拉格朗日乘子法:它是将原问题转化为求拉格朗日函数的驻点。
非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。20世纪50年代初,库哈(HWKuhn)和托克(AWTucker)提出了非线性规划的基本定理,为非线性规划奠定了理论基础。
这一方法在工业、交通运输、经济管理和军事等方面有广泛的应用,特别是在“最优设计”方面,它提供了数学基础和计算方法,因此有重要的实用价值。对于静态的最优化问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。
应用范围
在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制系统的某些参数,使系统的工作状态最佳。
如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。
用matlab的ga()遗传算法函数求非线性多目标的最小值(或最大值),其解决帮助如下:
1、首先建立自定义目标函数,y=FitFun(x)
2、其二建立自定义约束函数,[c,ceq]=NonCon(x)
3、最后,根据已知条件,用ga()函数求解。
为了说明问题,没有用你随意给的问题。下面,给你一个例子作参考。
FitFunm
function f = FitFun(x,a1)
f = exp(x(1))(4x(1)^2 + 2x(2)^2 + 4x(1)x(2) + 2x(2) + a1);
end
NonConm
function [c,ceq] = NonCon(x,a2)
c = [15 + x(1)x(2) - x(1) - x(2);-x(1)x(2) - a2];
ceq = [];
end
ga_mainm
a1 = 1; a2 = 10;
options = gaoptimset('MutationFcn',@mutationadaptfeasible);
x = ga(@(x) FitFun(x,a1),2,[],[],[],[],[],[],@(x) NonCon(x,a2),options)
运行结果
从你程序代码分析,主要存在如下问题:
1、目标函数书写问题。fun2(x)是目标函数,其输出变量g为约束变量,h为非约束变量,所以fun2(x)函数应改为
function [g,h] = fun2(x)
g(1) =[x(1)-1];
g(2) =[x(2)-1];
h = [];
2、选项问题。options = optimset('largescale','off'),此选项不适用于fmincon()函数。应做如下改动
options = optimoptions('fmincon','Algorithm','interior-point');
x0=[0,0]
[x,fval,exitflag] = fmincon(@(x) fun1(x),x0,[],[],[],[],[0,0],[],@(x)fun2(x),options)
更改后运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)