运筹学—例题求解

文章通过运输问题和生产计划展示了线性规划的解决过程,利用lingo软件求解最小运输费用和钢管截取问题,同时提到了梯度下降法在函数极小化中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0e900e4577764844b1743340f6e03177.png

作答如下:

4f7c21d2f626441791da388940a83a42.png

 

46a7d709025d4d3a875bbeff3339877a.png

 

7f9027f62c594371af0eeb0f957d19cd.png

 图解法验证:

36b591bed6c9443088508cea22b55241.png


 由图可得在点x1=20,x2=24取到最大值Z=4080;

27f2bbf953044802b0ee6dc8bad43a64.png

作答如下:

解:

(1)设 xij 为从产地Ai运往销地Bj的运输量,得到下列运输量表设 xij 为从产地Ai运往销地Bj的运输量,得到下列运输量表

 

B1

B2

B3

产量

A1

x11

x12

x13

200

A2

x21

x22

x23

230

销量

100

150

180

430

 模型如下:

ce218a492b5844b6953c66fe28dcc98a.png

  1. 采用表上作业法:

ad13befadd1c4024994039915f606e29.png

 

982f85ceff2a4eba8beb1a72dcf7e1b8.png

 

  

由表上作业法,得到最优方案:A1向B1城市运输50吨,向B2城市运输150吨;A2向B1城市运输50吨,向B3城市运输180吨;

(3)最小运输费用:

 

利用lingo求解:

运行代码:

min=90*x11+70*x12+95*x13+80*x21+65*x22+75*x23;

x11+x12+x13=200;

x21+x22+x23=230;

x11+x21=100;

x12+x22=150;

x13+x23=180;

x11>0;x12>0;x13>0;

x21>0;x22>0;x23>0;

运行结果:

  Global optimal solution found.

  Objective value:                              32500.00

  Infeasibilities:                              0.000000

  Total solver iterations:                             1

  Elapsed runtime seconds:                          0.10

 

  Model Class:                                        LP

 

  Total variables:                      6

  Nonlinear variables:                  0

  Integer variables:                    0

 

  Total constraints:                   12

  Nonlinear constraints:                0

 

  Total nonzeros:                      24

  Nonlinear nonzeros:                   0

 

 

 

                                Variable           Value        Reduced Cost

                                     X11        50.00000            0.000000

                                     X12        150.0000            0.000000

                                     X13        0.000000            10.00000

                                     X21        50.00000            0.000000

                                     X22        0.000000            5.000000

                                     X23        180.0000            0.000000

 

                                     Row    Slack or Surplus      Dual Price

                                       1        32500.00           -1.000000

                                       2        0.000000            0.000000

                                       3        0.000000            10.00000

                                       4        0.000000           -90.00000

                                       5        0.000000           -70.00000

                                       6        0.000000           -85.00000

                                       7        50.00000            0.000000

                                       8        150.0000            0.000000

                                       9        0.000000            0.000000

                                      10        50.00000            0.000000

                                      11        0.000000            0.000000

                                      12        180.0000            0.000000

答:采用以下方法,得到最小运输费用为32500元,即:

A1向B1城市运输50吨,向B2城市运输150吨;A2向B1城市运输50吨,向B3城市运输180吨;

b998d37edaff47cab269b7bee4a6e1fe.png

d70869de5bb34a928c674e2fd7e52575.png

(1)

解:19eb5116fd9e4f36845c7f0cf678bce0.png

a75dec86eaee40659e4b046706ae682b.png 

 (2)采用匈牙利解法

4ddfc000121c469fb8811b87997dbacd.png

 

其次可以采用优化的匈牙利解法、具体步骤如下:
step 0:观察每行最小元素个数总和r(sum)和每列最小元素个数总和c(sum)。
step 1:当 r(sum)<=c(sum),则先从系数矩阵的每列减去该列的最小元素,再从所得系数矩阵的每行元素中减去该行的最小元素。反之如果当r(sum)c(sum),则先从系数矩阵的每行减去该行的最小元素,再从所得系数矩阵的每列元素中减去该列 的最小元素。其他步骤同匈牙利法。

  1. 具体的方案有如下两个,都可以达到最小费用32:

1.甲选择B任务,乙选择C任务,丙选择A任务,丁选择D任务,戊选择E任务;

2.甲选择B任务,乙选择D任务,丙选择A任务,丁选择C任务,戊选择E任务;用lingo进行验证答案一致。

 5192c2b7c3cb49c18aa8e2c49abe0f3d.png

 1931fbddd9f348cdaf9755072c6b365e.png

e6533ab455814036b433762fd7755752.png 

 a15fba4e2d024bf3b37c8b9137022f4c.png

b4631b22555f42579d3b8c318e4e2383.png 

f4b980350ff14d3eaee55ce3d7c11102.png 

梯度下降法也叫最速下降法,基本思想是往函数下降最快的方向进行搜索,函数某个方向上的变化率可以用函数导数进行表征,因此搜索方向就可以根据函数导数确定,即以 f(x) 在点 xk 方向导数最小的方向作为搜索方向:

 

利用python程序求解、程序具体见附加:

68751d19c97f41998461ce9251e16660.png

572b41d83d21430299d8689abd826d1a.png 

得出:x1= 3.99996710374836,

x2=1.99997966899839 ,

f(x)极小值分别为 -7.99999999942876

在通过编写MATLAB进行计算,结果如下:x1=4,x2=2时,f(x)=−8,迭代次数为12,与python程序求解一致。

 

# -*- coding: utf-8 -*-
import sympy as sy


def cal_dffi(f, a, b):
    # 声明变量
    x1 = sy.symbols("x1")
    x2 = sy.symbols("x2")
    # 求偏导
    f1 = sy.diff(f, x1)
    y1 = f1.evalf(subs={x1: a, x2: b})
    f2 = sy.diff(f, x2)
    y2 = f2.evalf(subs={x1: a, x2: b})

    return y1, y2


def gd(a, b, f, alpha, detal):
    x1 = sy.symbols("x1")  # 声明变量
    x2 = sy.symbols("x2")
    y0 = f.evalf(subs={x1: a, x2: b})  # 计算函数值

    while True:

        detalx, detaly = cal_dffi(f, a, b)
        a = a - alpha * detalx
        b = b - alpha * detaly
        y1 = f.evalf(subs={x1: a, x2: b})  # 偏导
        if abs(y1 - y0) < detal:  # 函数值
            break
        else:
            y0 = y1
    return a, b, y1


if __name__ == '__main__':
    # 定义函数
    x1 = sy.symbols("x1")  # 声明变量
    x2 = sy.symbols("x2")
    f = x1 ** 2 + 2 * x2 ** 2- 2 * x1 * x2  - 4 * x1  # 函数

    a = 1  # 初始点
    b = 1
    alpha = 0.1
    detal = 1e-10  # 精度

    a, b, y = gd(a, b, f, alpha, detal)
    print("x1,x2,f极小值分别为", a, b, y)

6.现有15米长的钢管若干,生产某产品需4米、5米、7米长的钢管各为100、150、120根,问如何截取才能使余料最省?(建立数学模型即可)

作答如下:

这是一个线性规划问题,首先要找出一共有多少中截法;

规格/根   序号

1

2

3

4

5

6

7

 

7米

2

1

1

0

0

0

0

120

5米

0

1

0

3

2

1

0

150

4米

0

0

2

0

1

2

3

100

余料/米

1

3

0

0

1

2

3

 

建立数学模型:      解:设按第i种方法截xi根(i=1,2,…7);

41c0161a2ca742f6a4c119e775052427.png

 

 

利用lingo求解:

运行代码:

min=x1+x2+x3+x4+x5+x6+x7;

2*x1+x2+x3>=120;

x2+3*x4+2*x5+x6>=150;

2*x3+x5+2*x6+3*x7>=100;

@gin(x1);@gin(x2);@gin(x3);@gin(x4);

@gin(x5);@gin(x6);@gin(x7);

结果:

  Global optimal solution found.

  Objective value:                              135.0000

  Objective bound:                              135.0000

  Infeasibilities:                              0.000000

  Extended solver steps:                               0

  Total solver iterations:                             3

  Elapsed runtime seconds:                          0.11

 

  Model Class:                                      PILP

 

  Total variables:                      7

  Nonlinear variables:                  0

  Integer variables:                    7

 

  Total constraints:                    4

  Nonlinear constraints:                0

 

  Total nonzeros:                      18

  Nonlinear nonzeros:                   0

 

 

 

                                Variable           Value        Reduced Cost

                                      X1        35.00000            1.000000

                                      X2        0.000000            1.000000

                                      X3        50.00000            1.000000

                                      X4        50.00000            1.000000

                                      X5        0.000000            1.000000

                                      X6        0.000000            1.000000

                                      X7        0.000000            1.000000

 

                                     Row    Slack or Surplus      Dual Price

                                       1        135.0000           -1.000000

                                       2        0.000000            0.000000

                                       3        0.000000            0.000000

                                       4        0.000000            0.000000

080a94b9c7d645f8bfb3f07dce1e1574.png

答:使用135根15米长的钢管,采用以下方案,余料最省:

取35根使用第一种法得到70根7米长的钢管,剩余余料35米;

取50根使用第四种法得到150根5米长的钢管,剩余余料0米;

取50根使用第三种法得到50根7米长、100根4米长的钢管,剩余余料0米;

 

  1. 请结合实例解释线性规划问题的基本(不可行)解,基本可行解,可行解(不是基本解),并说明三者之间关系。

结合生产计划用一张图,来举例分析线性规划问题的三种解:

 

 

生产计划问题:结合下列表格,如何安排生产使利润最大?

 

资源

设备

5

2

170

原材料A

2

3

100

原材料B

1

5

150

利润

10

18

 

采用图解法:

e203b193d6744710a29fd36bd71beb7a.png

基本解:各个等式约束直线的交点,外加与坐标轴的交点

基本可行解:基本解里面在可行域范围的那些基本解,可行域的顶点

行解:可行解只有一个要求:满足所有约束条件

最优解:基本可行解里面使目标函数最大(最小)的基本可行解

解之间的关系如下图:

81c7d17ac77348ca84089f0736806303.png

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tech行者

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值