数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】

🚀【MOOC数学建模与实验---学习笔记---整理汇总表】🚀

🌈【学习网址:MOOC---郑州轻工业大学---数学建模与实验】🌈

目   录

4.1 数学规划介绍

1、数学规划模型的定义

2、数学规划模型

2.1、企业生产计划

3、例1 加工奶制品的生产计划

3.1、整数规划(Integer Programming,简记IP)

4、0-1规划模型 选课策略

5、非线性规划模型

5.1、非线性规划

5.2、基本概念

5.3、算法概述

5.4、MATLAB软件求解

4.2 奶制品的生产和销售

1、优化模型和优化软件的重要意义

2、优化(Optimization),规划(Programming)

3、优化问题的一般形式

4、无约束优化:最优解的分类和条件

5、LINGO需要掌握的几个重要方面

6、例1 加工奶制品的生产计划

6.1、模型求解

6.2、结果解释

7、LINGO模型的构成:5个段

8、例1:选址问题

选址问题:NLP

Lingo模型的集合求解

6发点8收点运输模型

4.3 整数规划(4.3 汽车生产与原油采购)(例1 汽车厂生产计划)

问题1:制定月生产计划,使工厂的利润最大.

1、模型建立

2、模型求解

问题2:生产某类汽车,至少生产80辆,求生产计划.

方法1:分解为8个LP子模型

方法2:引入0-1变量,化为整数规划

方法3:化为非线性规划

汽车厂生产计划---分析总结

4.4 0-1规划

选课策略

销售代理的开发与中断

问题1的建模

问题1的求解

问题2的建模

问题2的求解

4.5 非线性规划

引例 组合投资

引例 投资选择问题

基本概念

算法概述

MATLAB软件求解

1.函数fminunc、 fminsearch的具体用法

2.函数fmincon的具体用法


4.1 数学规划介绍

数学规划:线性规划、非线性规划、连续规划、整部规划、动态规划...

数学规划:线性规划【整数线性规划(全整数线性规划、部分整数线性规划)、0-1规划】、非线性规划

1、数学规划模型的定义

目标函数:z=f(x)       x:n维列向量     x1、x2...xn:决策变量

gi(x) ≤ 0 :约束条件

2、数学规划模型

需要对模型进行计算、分析

2.1、企业生产计划

                                                                 空间层次

工厂级:根据外部需求和内部设备、人力、原料等条件,以最大利润为目标制订产品生产计划;

车间级:根据生产计划、工艺流程、资源约束及费用参数等,以最小成本为目标制订生产批量计划.

                                                                 时间层次

若短时间内外部需求和内部资源等不随时间变化,可制订单阶段生产计划,否则应制订多阶段生产计划.

非线性规划问题:无约束   二分法、牛顿迭代法、计数向量法

针对不同的问题,要采用不同的方法。

3、例1 加工奶制品的生产计划

灵敏度分析

影子价格(shadow price),又称 最优计划价格 或 计算价格。它是指依据一定原则确定的,能够反映投入物和产出物真实经济价值、反映市场供求状况、反映资源稀缺程度、使资源得到合理配置的价格。影子价格反映了社会经济处于某种最优状态下的资源稀缺程度和对最终产品的需求情况,有利于资源的最优配置。

Lingo:默认所有变量 ≥ 0;如果变量取负,需要声明【  @free(变量)  】

3.1、整数规划(Integer Programming,简记IP)

整数线性规划问题

@gin(x1):@指向,x1取整数。

Lingo:<、≤ 作用相同!

280*x1:称号* 不能省略,省略的话 280x1 -> 变量名。

4、0-1规划模型 选课策略

0-1规划模型:对 问题决策、选择,有着很大的作用。

3个 约束条件 !!!

选修3号课程的前提是:已学1号、2号课程。

∴ x3 ≤ x1,x3 ≤ x2      两式相加,2*x3 ≤ x1 + x2

移项得:2*x3 - x1 - x2 ≤ 0

与此类似:x4 ≤ x7,x4 - x7 ≤ 0

...

得到 6个 约束条件。

一共9个约束条件。拉格朗日法求解,较为麻烦 --> Lingo   @gin(x1...x9):x1...x9取整数

5、非线性规划模型

5.1、非线性规划

只要 目标函数、约束条件,有一个是非线性的,这个问题 就是 非线性规划。

xj 取 0:表示不投资这个项目。

xj 取 1:表示    投资这个项目。

5.2、基本概念

L:下界;   U:上界

f(x)、g(x)、h(x) 只要有一个是非线性的,问题就是一个非线性规划问题。

非线性规划问题:有一部分,可以用Lingo求解。

非线性规划问题:无约束(没有条件限制)、约束   两种。

无约束:决策变量无条件限制  x∈R^{n}

对于无约束问题的求解方法:一般构造 迭代数列。编写迭代程序,求f(x)最小值。

牛顿迭代法(常用)、最速下降法   一般是这俩方法结合使用,各有优点、缺点。

最速下降法:当不知道最优解在什么情况下时,随便找一个初始解,从此解出发 用最速下降法迭代...最后,靠近f(x)最小值点的速度越来越慢,并且永远达不到。--> 改用 牛顿迭代法:当初始值充分靠近x*(f(x)最小值点)附近时,迭代点收敛到x*的速度较快。

最速下降法:当初始值离最优解x*较远的时候,下降速度(收敛速度)很快,一旦靠近x*收敛速度就会变慢。

两法结合使用 --> f(x)最小值最优解x*。

二次规划

min:目标函数;   X、c:n维列向量;   H:矩阵;

5.3、算法概述

5.4、MATLAB软件求解

4.2 奶制品的生产和销售

1、优化模型和优化软件的重要意义

2、优化(Optimization),规划(Programming)

3、优化问题的一般形式

f(x):目标函数          目的:求最小值min

4、无约束优化:最优解的分类和条件

5、LINGO需要掌握的几个重要方面

  1. 掌握集合(SETS)的应用;
  2. 正确阅读求解报告(尤其要掌握敏感性分析);
  3. 正确理解求解状态窗口;
  4. 学会设置基本的求解选项(OPTIONS);
  5. 掌握与外部文件的基本接口方法。

6、例1 加工奶制品的生产计划

6.1、模型求解

Lingo:默认变量非负数。

48.000000:原料每增加一桶牛奶,目标函数值(总利润)增加48元。   48-35=13,获利13元

2.000000:每增加一个工时,利润增加2元。

可以用 Lingo 进行 模型求解

Lingo:<、<=  含义相同;默认所有变量都是 非负变量;@free(x1);  声明变量x1可以取负值。

!  :注释作用。

6.2、结果解释

Lingo分析:默认关闭。

开启 Lingo数据分析

结果解释

x1:当前系数72,最大可增加24,最小可减少8

x1在区间 [72-8, 72+24] 变化,最优解不变。

7、LINGO模型的构成:5个段

  1. 目标与约束段
  2. 集合段(SETS ENDSETS)
  3. 数据段(DATA ENDDATA)
  4. 初始段(INIT ENDINIT)
  5. 计算段(CALC ENDCALC)

目标:目标函数;   约束段:约束条件

集合段:所用到的变量的下标

数据段:所用到的变量(向量、矩阵...)的值

初始段:Lingo求解线性规划模型,是一个迭代过程,需要初值,设定初始值。

计算段:计算。

实际遇到的问题,规模较大,要掌握Lingo集合。使用原始方法,将模型数据输入,明显不太现实。

Lingo可以求解非线性规划模型。

8、例1:选址问题

吨公里数:运送的水泥量*运送距离。

目标函数(总的顿公里数)min:统计和【Cij(运量) * 距离】

水泥日用量:di   需求量约束   从两个料场运往工地的水泥总数(cij) 要 满足 工地需求量(di)      6个工地

运送水泥量(cij) < 水泥存储量(ej)

sets:集合      endsets 集合结尾                data: 数据   用“ ”或“,”分隔数据   enddata: 结束输入数据

demand集合名称;1...6:六维向量;a、b、d:都是六维向量

supply/1..2/:x,y,e;    supply是二维列向量集合,   x、y:两个料场的横纵坐标构成的列向量

link(demand, supply):c;    联合集合   矩阵集合    link:六行两列矩阵    c属于此集合

a:六个工地的横坐标 系数矩阵

b:六个工地的纵坐标

d:六个工地的水泥需求量

e:日存储量

x、y:料场的横纵坐标

x=5,1; 两个料厂的横坐标构成的向量

y=2,7; 两个料厂的横坐标构成的向量

目标函数@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));   @sum:Σ(求和)    i属于demand(1~6),j属于supply(1~2)

link(i,j)   i属于demand(6个分量),j属于supply(2个分量),c(i, j):从j料场到i工地的水泥运量

(x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2):料场到工地的距离

@for():约束条件    demand(i):对任意的i(1~6)

选址问题:NLP

cij:料场j到工地i的运量

总的吨公里数:料场j到工地i的运量 * 料场j到工地i的距离

两个料场的位置:(x1, y1)、(x2, y2)

xj、yj 是 变量

给x、y初始值赋值:迭代法,初始值合适的话,可以减少迭代次数,容易找到迭代次数。    init:    endinit  之间

目标函数@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));   @sum:Σ(求和)    i属于demand(1~6),j属于supply(1~2)

(x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2):料场到工地的距离

@for():约束条件    demand(i):对任意的i(1~6) 

 

x、y是位置,可正可负,取消非负要求  @free()

料场A:(5.75,5.00)      料场B:(7.25,7.75)

C(1, 1)~C(6, 2):运输量

 横纵坐标,都取整。

Lingo模型的集合求解

6发点8收点运输模型

4.3 整数规划4.3 汽车生产与原油采购)(例1 汽车厂生产计划

整数规划:整数线性规划、整数非线性规划 

问题1:制定月生产计划,使工厂的利润最大.

1、模型建立

线性规划模型

x1、x2、x3 取 整数 ---> @gin(x1...x9):x1...x9取整数

2、模型求解

问题2:生产某类汽车,至少生产80辆,求生产计划.

方法1:分解为8个LP子模型

不考虑 “不满足条件的子模型” 。

方法2:引入0-1变量,化为整数规划

引入非常大的正数M         y1=1时,表示 生产这种车。

y1 = 0:x1 ≤ 0 ,x1 ≥ 0

y1 = 1:x1 ≤ M,x1 ≥ 80

@bin();     设定0-1变量

方法3:化为非线性规划

x1 =0 或 ≥80   等价于   x1 (x1 − 80) ≥ 0

汽车厂生产计划---分析总结

汽车厂生产计划

  • 决策变量为整数,建立整数规划模型.
  • 求解整数规划和非线性规划比线性规划困难得多(即便用数学软件).
  • 当整数变量取值很大时, 可作为连续变量处理,问题简化为线性规划.
  • 对于类似于“x=0 或 ≥80”这样的条件,通常引入0-1变量处理,尽量不用非线性规划(特别是引入的整数变量个数较少时).

4.4 0-1规划

选课策略

0-1规划模型:对 问题决策、选择(策略选择问题),有着很大的作用。

3个 约束条件 !!!

选修3号课程的前提是:已学1号、2号课程。

∴ x3 ≤ x1,x3 ≤ x2      两式相加,2*x3 ≤ x1 + x2

移项得:2*x3 - x1 - x2 ≤ 0

与此类似:x4 ≤ x7,x4 - x7 ≤ 0

...

得到 6个 约束条件。

一共9个约束条件。拉格朗日法求解,较为麻烦 --> Lingo   @gin(x1...x9):x1...x9取整数

@bin();    设定0-1变量

目标:Z尽量小,W尽量大。即,求 min{Z, -W}

Lingo不能给出问题 所有的最优解,只给一个!!!

加权法:侧重xxx               λ1 + λ2 = 1               多目标问题,转化为单目标问题。

  • x1 ≤ x2
  • x1=1,x2=0
  • (x1=1,x2=0   or   x1=0,x2=1)x1*x2=0
  • x1≥0,x2≥0

销售代理的开发与中断

问题1的建模

0-1规划问题                       Σx1t:t(1~5)1~5年

7.5(5*x11 + 4*x12 + 3*x13 + 2*x14 + x15):从第x年,开始建立代理关系。

问题1的求解

\sum x_{it}\leq 1   代理关系,一旦建立,将长期保持。∴从1~5年建立代理关系后,关系将一直保持到第5年。

i=1~4,分别代表 4位代理;t=1~5,分别 第1~5年。

问题2的建模

问题2的求解

4.5 非线性规划

引例 组合投资

R(X):利润;       Q(X):风险

x1~x8:8个项目,只能选一个进行投资。(0-1变量)

  • 模型1:将 风险 固定到 某个范围内。
  • 模型2:收益大于某个值的情况下,最小化风险。

  • 加权平均:ρ小,偏向于增加利润;ρ大,偏向于降低风险。ρ * \sqrt{Q(X))} 或者 R(X),要根据情况选择。  

引例 投资选择问题

基本概念

L≤x≤U,决策变量的上界、下界

算法概述

约束非线性规划算法

  1. 可行方向法;
  2. 罚函数法;
  3. 梯度投影法;
  4. 逐步二次规划法(SQP)

          (Sequential Quadratic Programming)

MATLAB软件中主要采用SQP算法。

MATLAB软件求解

fminsearch:寻找无约束规划问题的最小值。一般是,多元函数求最小值。也可求,最大值。

fminunc 无约束非线性最优化   常用

1.函数fminunc、 fminsearch的具体用法

unc:无约束   Unconstrained

求 F(X)最小值,Min F(X)

建立fun.m文件后,将F(X)表达式写到文件中。

[X, fval] :(X)最优解、(fval)最优解对应的最优值

'fun'  或者  @fun

x0:(迭代初始值)设定的初始值

options:设置

先新建fun1.m文件。

x是向量,x向量有2个分量 x(1)、x(2)

误差:1e-10:10^-10

iter:迭代

找两个不同的初始值,进行迭代,结果不一样,说明:此问题对初始值敏感。

选不同的初始值进行比较,看解集中到哪个点上,此点可能就是最优解。

局部性   尽量选择接近最优解的点,否则可能会迭代失败。

2.函数fmincon的具体用法

lb ≤ X ≤ ub      lb、ub:决策变量的上界、下界

[x,fval]= fminunc('fun1',x0, options),        x:最优解;fval:最优解对应的最优值

x0:迭代初始值         A:所有的不等式线性约束的系数构成的矩阵   b:不等式约束的右端向量

Aeq:所有的线性等式约束的变量前的系数构成的矩阵   beq:等式约束的右端向量

@con:调用con.m文件,记录了模型中所有的不等式约束、等式约束。非线性约束

① fun.m文件:目标函数的表达式文件

② function [c,ceq]= nonlcon(x)        c:非线性不等式约束表达式(函数体)     ceq:非线性等式约束表达式

非线性不等式约束 写成 标准形式 -> “等式 ≤ 0”的形式

c=G1(x);    有若干个(≥2)非线性不等式约束,使用[]括起来,中间用“,”分开。

没有等式约束:ceq用空“[]”来表示。

f = -x(1)*x(2);     求Max f(x) = x1*x2,    fmincon用来求最小值,       给f加负号,可求最大值Max。

x0=[10 10 2]';     ':转置,列向量

3、使用quadprog求解二次规划问题

 

  • 92
    点赞
  • 692
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 序列二次规划(SQP)算法是一种常用于非线性优化问题的算法。它基于牛顿法或拟牛顿法,通过迭代求解一系列二次规划子问题来逐步逼近最优解。 SQP算法的基本思路是:首先确定一个初始点,然后对该点进行一次牛顿法或拟牛顿法迭代,得到一个新点。接下来,将新点作为起点,再次进行迭代,直到收敛于最优解。 在每次迭代中,SQP算法将原问题转化为一个二次规划子问题,并使用线性或二次规划求解器来求解该问题。然后,再次利用牛顿法或拟牛顿法更新搜索方向和步长,并计算新的迭代点。 与其他非线性优化算法相比,SQP算法的优点在于它可以处理约束条件和非线性目标函数,并且可以在较短的时间内获得较好的优化结果。但是,它也有一些缺点,比如可能会陷入局部最优解,需要选择合适的初始点和调整参数来获得较好的优化结果。 在Python中,可以使用SciPy库中optimize模块中的`minimize`函数来实现SQP算法。以下是一个使用SQP算法求解非线性优化问题的简单示例: ```python from scipy.optimize import minimize # 目标函数 def objective(x): return x[0]**2 + x[1]**2 # 约束条件 def constraint(x): return x[0] + x[1] - 1 # 初始点 x0 = [0.5, 0.5] # 定义优化问题 problem = {'type': 'eq', 'fun': constraint} # 调用SQP算法 res = minimize(objective, x0, method='SLSQP', constraints=problem) # 输出结果 print(res) ``` 在这个例子中,我们定义了一个目标函数 `objective` 和一个约束条件 `constraint`。然后,我们使用 `minimize` 函数来求解最小化目标函数的问题,其中 `method` 参数指定了使用的算法为SQP算法。最后,我们输出了优化结果 `res`。 需要注意的是,优化问题往往比较复杂,需要根据具体问题选择合适的算法和调整参数来获得较好的优化结果。 ### 回答2: 非线性优化是一种解决非线性目标函数和约束条件下的最优化问题的方法。在实际问题中,很多问题的目标函数和约束条件都是非线性的,例如传统的线性规划问题无法解决网络流问题、投资决策问题等。 SQP算法(Sequential Quadratic Programming)是一种常用的非线性优化算法。它是一种迭代算法,通过不断优化一系列二次规划子问题的解来逐步逼近最优解。 SQP算法的基本思想是,在每次迭代中,通过使用一个二次规划模型来近似原始非线性优化问题。首先,通过求解一个特定点近的二次规划问题,得到一种近似的搜索方向。然后,使用线性搜索算法确定移动步长。最后,更新当前解,并继续下一次迭代,直到满足停止准则。 SQP算法相对于其他非线性优化算法的优点在于,它不需要计算全局Hessian矩阵,而只需通过求解一系列的约束二次规划问题,大大降低了计算复杂度。此外,SQP算法还可以处理带有等式约束和不等式约束的混合问题,具有较好的稳定性和收敛性。 然而,SQP算法也存在一些缺点。首先,由于需要通过求解一系列二次规划问题来近似原始问题,每次迭代的计算代价较高。其次,SQP算法对初始点的选取较为敏感,不同的初始点可能导致不同的解。最后,由于需要使用一阶和二阶导数信息,当目标函数和约束条件过于复杂时,计算导数可能会变得困难。 总的来说,SQP算法是一种可行的非线性优化算法,具有一定的优势和一些限制。在实际问题中,我们可以根据具体情况选择合适的优化算法来解决非线性优化问题。 ### 回答3: 非线性优化是指在目标函数和约束条件中包含非线性项的优化问题。SQP(Sequential Quadratic Programming)算法是一种常用的非线性优化算法。该算法通过不断近似原问题的目标函数和约束条件,以迭代的形式逐步求解问题的最优解。 SQP算法的基本思想是,在每次迭代中,将非线性优化问题转化为求解一系列凸二次规划子问题。对于每个子问题,首先利用牛顿法或拟牛顿法求解二次规划问题的解,然后根据一定的凸约束满足性条件,确定负向搜索方向。接着通过线搜索确定步长,更新当前迭代点,然后进行下一次迭代,直到满足收敛条件。 SQP算法的优点在于:能够处理包含非线性约束的优化问题,且可以通过迭代获得全局最优解。同时,该算法对初始猜测值不敏感,且算法相对较稳定,收敛速度快。 但SQP算法也存在一些局限性,比如对于高维的优化问题,计算复杂度较高;在求解非凸优化问题时,可能会陷入局部极小点而无法达到全局最优。 总之,SQP算法是一种在非线性优化问题中常用的迭代求解方法,能够有效地求解具有非线性约束的优化问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upward337

谢谢老板~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值