赞
踩
非线性规划研究的对象是非线性函数的数值最优化问题,是20世纪50年代形成的一门学科,其理论和应用发展十分迅猛,随着计算机的发展,非线性规划应用越来越广泛,针对不同的问题提出了特别的算法
在实际工作中,常常会遇到目标函数和约束条件至少有一个是非线性函数的规划问题,即非线性规划问题,非线性规划问题的标准形式为
非线性规划问题按照约束条件可分为以下三类
1.无约束非线性规划模型
2.等式约束非线性规划模型
3.不等式约束非线性规划模型
其中,无约束非线性规划模型和等式约束非线性规划模型较为简单,本文主要介绍不等式约束非线性规划模型,可用matlab函数fmincon进行求解
- x=fmincon(f,x0,A,b)
- x=fmincon(f,x0,A,b,Aeq,beq)
- x=fmincon(f,x0,A,b,Aeq,beq,lb,ub)
- x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon)
- x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中,x0为原始点,A,b分别为不等式约束的系数矩阵和右端列向量,lb,ub分别为变量x的下界和上界,options为指定优化参数进行最小化。
设有100万元资金,要求5年内使用完,若在一年内使用资金x万元,则可获得效益万元(效益不能再使用),当年不用的资金可存入银行,年利率为5%,试制定出资金的使用计划,使5年效益之和最大。
不妨先转化为数学问题,设变量表示第年所使用的资金数,则有以下优化问题
根据以上编写MATLAB程序如下
- %% 非线性规划问题求解
- % Copyright 2023, NUDT
- %
- % nudt04
- %
- % 说明:
- % 不等式非线性规划问题求解
- %
- % 输入:
- % 目标函数和约束条件
- % 输出:
- % 最优解
- %
- % 原始作者:帅小吉
- % 建立日期:2023年10月7日
- %
- % 更新历史:
- % 无
- clear all
- clc
- %% 求解过程
- x0=[10,10,10,10,10];%初始值
- A=[1.05,1,0,0,0
- 1.1025,1.05,1,0,0
- 1.1576,1.1025,1.05,1,0
- 1.2155,1.1576,1.1025,1.05,1];%不等式矩阵
- b=[105;110.25;115.76;121.55];%不等式矩阵右侧
- Aeq=[];%等式矩阵
- beq=[];%等式右侧
- lb=[0;0;0;0;0];%变量下界约束
- ub=[];%变量上界约束
- [x,fval]=fmincon(@fun1,x0,A,b,Aeq,beq,lb,ub)%函数求解
- %% 目标函数
- function f=fun1(x)
- f=-sqrt(2*x(1))-sqrt(2*x(2))-sqrt(2*x(3))-sqrt(2*x(4))-sqrt(2*x(5));
- end
通过MATLAB算法得到本问题最优解
同理,还可以使用分函数方法,将目标函数和约束条件分别编为函数进行求解实例如下
- %% 非线性规划问题求解
- % Copyright 2023, NUDT
- % nudt04
- % 说明:
- % 不等式非线性规划问题求解
- % 输入:
- % 目标函数和约束条件
- % 输出:
- % 最优解
- % 原始作者:帅小吉
- % 建立日期:2023年10月7日
- % 更新历史:
- % 无
- clear all
- clc
- clear all
- clc
- x0=[1;1;1;1;1];
- vlb=[0;0;0;0;0];
- vub=[100;100;100;100;100];
- A=[];
- b=[];
- Aeq=[];
- beq=[];
- [x,fval]=fmincon(@fu,x0,A,b,Aeq,beq,vlb,vub,@myco)
- %% 约束条件
- function [g,ceq]=myco(x)
- g(1)=x(1)-100;
- g(2)=1.05*x(1)+x(2)-105;
- g(3)=1.1025*x(1)+1.05*x(2)+x(3)-110.25;
- g(4)=1.1576*x(1)+1.1025*x(2)+1.05*x(3)+x(4)-115.76;
- g(5)=1.2155*x(1)+1.1576*x(2)+1.1025*x(3)+1.05*x(4)+x(5)-121.55;
- ceq=0
- end
- %% 目标函数
- function f=fu(x)
- f=-(sqrt(2*x(1))+sqrt(2*x(2))+sqrt(2*x(3))+sqrt(2*x(4))+sqrt(2*x(5)));
- end
运行结果一致,算法有效
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。