线性规划和非线性规划理论与实践


第一节        线性规划模型

线性规划适用的典型赛题


线性规划中的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

从图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元。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
线性最优化计算方法》是由张光澄编写的一本关于线性最优化计算方法的资料。该资料以线性最优化问题为研究对象,系统地介绍了线性最优化问题的基本理论和计算方法。 在线性最优化计算方法的研究中,线性规划是一个重要的研究领域。尽管线性规划的计算方法相对较为简单,但线性规划的计算方法相对复杂,因为线性规划的目标函数和约束条件可能是线性的,解的搜索空间更大。因此,线性最优化计算方法的研究具有重要的理论和应用价值。 线性最优化计算方法主要包括划分法、牛顿法、拟牛顿法等。划分法是将问题划分为若干子问题,通过求解子问题的最优解来逼近原问题的最优解。牛顿法是利用函数的二阶导数近似原函数的局部性质,从而快速收敛到最优解。拟牛顿法则是通过近似目标函数的Hessian矩阵来迭代求解问题。 通过学习《线性最优化计算方法》,我对线性最优化问题的解决思路和计算方法有了更深入的了解。该书的讲解通俗易懂,同时提供了大量的计算案例和实践经验,帮助读者理解和掌握线性最优化计算方法的关键步骤和技巧。 总之,《线性最优化计算方法》是一本很好的资料,对于从事线性最优化问题研究或应用的人士来说,具有实际意义和参考价值。读者只需具备一定的数学和优化理论基础,即可通过这本资料深入了解线性最优化计算方法的原理和操作技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值