第一节 线性规划模型
线性规划适用的典型赛题
线性规划中的linprog函数
c=[70;120];
a=[9, 4;4,5;3,10;-1,0;0,-1];
b=[3600;2000;3000;0;0];
[x,y]=linprog(-c,a,b)
y=-y
及,z的最大值为42800
例2
相应代码
clc;clear
f=[2;3;-5];
A=[-2,5,-1; %matlab只识别小于等于的不等式因数,所以要改数
1,3,1];
b=[-10;12];
Aeq=[1,1,1];
beq=7;
x=linprog(-f,A,b,Aeq,beq,[0;0;0])
整数线性规划
在许多线性规划模型中,变量取整数时才有意义。例如,不可分解产品的数目,如汽车、房屋飞机等,或只能用整数来记数的对象。这样的线性规划称为整数线性规划,简称整数规划,记为IP。整数规划分为两类:一类为纯整数规划,记为PIP,它要求问题中全部变量都取整数;另一类是混合整数规划,记之为MIP,它的某些变量只能取整数,而其他变量则为连续变量。整数规划的特殊情况是0-1规划,其变量只取0或者1;图论中的些问题(如背包问题等)也可用0-1规划来描述。
在整数规划模型中,若每一变量只取0或1,即为0-1规划模型。0-1规划模型因其特殊性,又不同于整数规划的解法。
第二节 非线性规划模型
数学规划问题中,当目标函数或约束函数中至少有一个是非线性函数时称这类问题为非线性规划。
一般(标准)形式
当目标函数及约束函数是线性函数时,(NLP)就变成(LP)。
非线性规划适用的典型赛题
非线性规划中的fmincon函数
实现步骤:
例2相关代码:
fun1
function f=fun1(x);
f=sum(x.^2)+8; % x.表示对x的所有分量去操作
fun2
function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2 %matlab只识别小于等于的不等式因数,所以要改数,且matlab中默认为小于等于0
x(1)+x(2)^2+x(3)^3-20]; % 非线性不等式约束
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3]; % 非线性等式约束
main
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2') %单引号引起来表示调用这个函数
%rand(3,1)随机生成3*1的数矩阵,x0位置为迭代初始值对最终结果无影响
广告的费用及其效应(举例)
代码为
x=(2:0.5:6);
y=[4.1,3.8,3.4,3.2,2.9,2.8,2.5,2.2,2.0];
subplot(1, 2, 1)
plot(x,y,'*r') % *的意思是标记为星号,r为红色
title('售价和预期销售量关系图')
xlabel('售价(元)')
ylabel('预期销售量(万桶)')
x=(0:1:7);
y=[1.0,1.4,1.7,1.85,1.95,2.0,1.95,1.80];
subplot(1, 2, 2)
plot(x,y,'rp') % p的意思为五角星
title("广告费和销售增长因子关系图")
xlabel('广告费(万元)')
ylabel('销售增长因子')
从图1和图2易见,售价x与预期销售量y近似于一条直线,广告费z与销售增长因子k近似于一条二次曲线。为此可令:从图1和图2易见,售价x与预期销售量y近似于一条直线,广告费z与销售增长因子k近似于一条二次曲线。为此可令:y=a+bx k=c+dz+ez^2 ,系数a, b, c, d, e是待定参数。
像这样的单调性发生了变化的这样的因果关系,通常就不再是非线性关系了,除非它是分段函数。另有一些边界或者拐点的。特殊情况另外去分析了,没有那样的情况,那这是一个。直接的因果关系。这就是一个非线典型的非线性的关系。也就是销售因销售增长因子。
模型的建立
投入广告费后,实际销售量s等于预期销售量y乘以销售增长因子k,即s=ky。所获得的利润:
P=收入-支出
=销售收入-成本-广告费
= sx - 2s - z
= kxy - 2ky - z= ky(x – 2) - z
= (c + dz + ez^2)(a + bx)(x– 2) – z
我们期望利润P达到最大,即
由于目标函数不是线性函数,因此这一问题的数学模型为有约束条件的非线性规划模型。在日常生活中非线性规划问题要比线性规划问题普遍。
模型求解
首先利用Matlab计算(1)(2)中的参数a,b,c,d, e,并画出散点图和拟合曲线。
相应matlab代码为
clear;clc
x=(2.0:0.5:6.0);
y=[4.1,3.8,3.4,3.2,2.9,2.8,2.5,2.2,2.0];
p=polyfit(x,y,1)
subplot(1, 2, 1)
plot(x,y,'k*',x,polyval(p,x),'k-')
title('售价和预期销售量拟合图')
xlabel('售价(元)')
ylabel("预期销售量(万桶)")
x=(0:1:7);
y=[1.0,1.4,1.7,1.85,1.95,2.0,1.95,1.80];
p=polyfit(x,y,2)
subplot(1, 2, 2)
plot(x,y,'kp',x,polyval(p,x),'k-')
title("广告费和销售增长因子关系图")
xlabel('广告费(万元)')
ylabel('销售增长因子')
运行后得结果:b=-0.5133, a=5.0422(即直线方程为y=-5133x+50242)
运行后得结果:e=-0.0426 d=0.4092 c=1.0188即抛物线方程为(y=-0.0426*10^(-10)x^2+0.4092*10^(-5)x+1.0188)
polyfit函数解释
其中 polyfit(x, y, 1) 是一个用于拟合多项式的函数。
它使用最小二乘法来拟合一个一次多项式(线性函数)到给定的数据点 (x, y) 上。具体来说,x 是一个包含自变量的数组,y 是一个包含因变量的数组。函数会根据这些数据点来拟合一个一次多项式,并返回拟合的系数。返回的系数 p 是一个包含两个元素的数组,其中第一个元素是拟合多项式的斜率(即直线的斜率),第二个元素是拟合多项式的截距(即直线与 y 轴的交点)。这样,通过使用 polyfit 函数,可以根据给定的数据点拟合出一个线性函数,并使用拟合的系数来进行进一步的分析和预测。
MATLAB求解优化模型
最后用MATLAB求解优化模型
因MATLAB中仅能求极小值,为此将优化模型转化为
代码为
nch221
function f=nch221(x)
a=50422.2;
b=-5133.33;
c=1.01875;
d=4.09226*10^(-5);
e=-4.25595*10^(-10);
f=x(2)-(c+d*x(2)+e*x(2)^2)*(a+b*x(1))*(x(1)-2);
nch222
function[c,cep]=nch222(x)
c=-x;
cep=[];
nch22
x0=[1,1];
options = optimset('LargeScale','off');
format long
[x,fval]=fmincon('nch221',x0,[],[],[],[],[],[],'nch222',options)
fval=-fval
结果,且x=5.9113,z=33116,函数P达到最大值116655。最大利润为116655元。