数学规划
1. 数学规划概述
(1)问题的一般形式
max(min) f ( x)
s.t. x ∈X
其中x是一个n维向量,也称决策变量;X是一个集合, 可以简单区域,也可以用一系列的等式和不等式甚至其 他形式表示,称为可行集。
(2)数学规划应用的广泛性
1, 吉尼斯世界纪录; 2,总理的政府工作报告;
3,公司的领导的核心工作; 4,如何使用好自己的钱;
5,树木的生长问题; 6,群狼的捕猎计划;
7,行星的运行轨道; 8,原子的内部结构。
(3)数学规划的分类
根据问题的结构,可以进行下面的一些分类
(1)线性规划:目标函数和约束是线性的
(2)非线性规划:目标函数或约束是非线性的
(3)整数规划:决策变量是离散的,只能取整数值
(4)多目标规划:目标函数有多个
(5)……
线性规划:最简单、最广泛使用。George B. Dantzig, 1947年线性规划单纯型算法
非线性规划:更多的应用背景。1951年Kuhn和Tucker,最优性条件。
整数规划:最富于挑战、回归本源。 1958年R.E.戈莫里,割平面法
多目标规划:人性多样化要求。1896年法国经济学家 V.帕累托提出多样化思想。
2.线性规划
(1)线性规划例子及模型的建立
例子1:动物饲养问题
Example1:动物饲养问题
一家现代化兔子饲养场饲养一种兔子。根据兔子在不同时期的体重计算出兔子每周营养物质的数量。简单起见,这里考虑三种对生长其重要作用的营养成分,蛋白质、矿物质和维生素。
蛋白质:70克
矿物质:3克
维生素:10毫克
现有五种饲料,公司希望找出满足动物营养需要使成本达到最低的混合饲料配置。
每一种饲料每斤所含的营养成分
① 决策变量:在混合饲料中,每周所需第j种饲料的斤数xj,j= 1,2,3,4,5;
② 约束条件:
•蛋白质:0.30x1+2x2+x3+0.6x4+1.8x5≥70
•矿物质:0.10x1+0.05x2+0.02x3+0.2x4+0.05x5≥3
•维生素:0.05x1+0.1x2+0.02x3+0.2x4+0.08x5≥10
•非负约束:xi≥0
③ 确定目标:混合饲料的成本最低
0.02x1+0.07x2+0.04x3+0.03x4+0.05x5→min
线性规划模型:
min 0.02x1+0.07x2+0.04x3+0.03x4+0.05x5
s.t. 0.30x1+2x2+x3+0.6x4+1.8x5≥70
0.10x1+0.05x2+0.02x3+0.2x4+0.05x5≥3
0.05x1+0.1x2+0.02x3+0.2x4+0.08x5≥10
xj≥0 j = 1,2,3,4,5;
Example2:蔬菜运输问题
有5个蔬菜基地每天向3家超市供应蔬菜,其相关数据如下:
制定调运方案,既可以满足供需关系,又使运输的吨公里数达到最小。
记号说明:(xi,yi)表示蔬菜基地i 的坐标;(aj,bj)表示超市j的坐标;Cij表示基地i到超市j的距离;
si表示蔬菜基地i的产量; dj表示超市j的需求量。
决策变量:基地i 到超市j 的运量Xij 作为决策变量(i = 1, 2, ..., 5,j = 1, 2, 3)。
Xij≥0,i=1,...,5, j=1,2,3
(3)线性规划MATLAB求解命令
linprog, 解决的线性规划问题的标准格式为:min cT x
s.t. A·x <= b
Aeq·x = beq
LB≤x≤UB
其中,A、 Aeq表示矩阵,而b、 c、 x、 beq、 LB、 UB为列矩阵
[x ,fval]= linprog(c, A, b, Aeq,beq ,LB, UB)
如果没有等式约束,就在相应位置输入空矩阵[ ], 不等式约束和上下界也类似,最后的输入项若没有,则可省略。
例一求解
由于linprog要求所有的不等式约束是“≤”的形式,所以将模型转化成为标准形式。
c=0.01*[2 7 4 3 5]’;
A=-[0.3 2 1 0.6 1.8;
0.1 0.05 0.02 0.2 0.05;
0.05 0.1 0.02 0.2 0.08];
b=-[70;3;10];
Lb=zeros(5,1); % 5行1列的零矩阵
[x,fval]=linprog(c,A,b,[],[],Lb)
计算结果:x=[0;0;0;39.7436;25.6410]
fval=2.4744
例二求解
%因为在linprog命令中决策变量和价格向量是向量,因此应该将对应的矩阵C和X拉直变成向量形式。
3.非线性规划
(1)非线性规划例子及模型的建立
例子1:拟合问题
平面上 n个点(xi,yi),i=1,…,n, 寻求一个函数y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近。
例子2:电路板设计问题
就是将电路元件选择适当位置并通过导线进行连接。
确定三个模块的位置,满足下列要求的情况下使得总连线最短。
(1)满足如图的连接关系;
(2)所有元件完全位于电路板之内;
(3)三个元件为圆柱形,半径分别为0.2,0.1和0.1;
(4)元件1和元件3要求距离等于0.5。
决策变量:令(x i, yi)(i =1, 2,3)为三个元件的中心的横纵坐标。
目标函数:总距离(六条连线长度之和)最小
(2)非线性规划标准形式
非线性规划问题,可以根据是否有约束条件,可以分成无约束问题和约束优化问题;
比如前面给出的例子1就是无约束非线性规划问题,而例子2是一个约束非线性规划问题。
无约束优化问题标准形式 :
Min f(x)
① 首先建立一个函数M文件,如fun.m
②调用格式:
[x, fval] = fminunc(‘fun’, x0, options)
约束优化问题标准格式:
Min f(x)
s.t. G1(x) ≤0, G2(x)=0, (非线性约束)
Ax ≤b, Aeq.x=beq, (线性约束)
Lb ≤x ≤Ub
调用格式:
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,Lb,Ub,@con)
(3)非线性规划MATLAB求解命令
例一求解
function y=fnonl(x)
t=[20.5 32.5 51 73 95.7];
R=[765 826 873 942 1032];
y=norm(x(1)*t+x(2)-R,2); % 2-范数:就是norm(...,2),即各元素平方和开根号;
y=y^2;
x=ones(2,1);
[x,fval]=fminunc( @fnonl,x)
结果:x =[3.3940;702.4918]
fval = 321.2166
例二求解
%目标函数M文件
function y=fcon(x)
y=((x(1)+1)^2+x(4)^2)^0.5+((x(1)-x(2))^2+(x(4)-x(5))^2)^0.5+((x(2)-0.5)^2+(x(5)-1)^2)^0.5+((x(1)-x(3))^2+(x(4)-x(6))^2)^0.5+(x(3)^2+(x(6)+1)^2)^0.5+((x(3)-1)^2+(x(6)-0.5)^2)^0.5;
%约束条件的函数M文件
function [c,ceq]=ccon(x)
c=[0.09-(x(1)-x(2))^2-(x(4)-x(5))^2;0.09-(x(1)-x(3))^2-(x(4)-x(6))^2;0.04-(x(2)-x(3))^2-(x(5)- x(6))^2];
ceq=[(x(1)-x(3))^2+(x(4)-x(6))^2-0.25];
x0=[0.5;0.2;0.1;-0.5;0.2;0.8];
Ub= [0.8;0.9;0.9;0.8;0.9;0.9];
Lb=-Ub;
options=optimset('display', 'iter') [x,fval]=fmincon(@fcon,x0,[],[],[],[],Lb, Ub,@ccon,options)
计算结果
x =[0.2930; 0.4445; 0.6574; 0.6410;0.9000;0.2987]
fval =4.2105