运筹优化学习03:Lingo非唯一最优解问题--油气开采构造处最优选择问题

简介: 运筹优化学习03:Lingo非唯一最优解问题--油气开采构造处最优选择问题

某油田在10个有油气构造处要选择若干个钻探采油,设第j 个构造开采时需花费aj元,投产后预计年收益为cj元,若尤其投资总额为b元,问题应选择哪几个构造开采最为有利。

1 基本问题求解

1.1 示例数据:

image.png

B = 7200;

1.2 模型构建:

gif.gif

gif.gif

gif.gif

gif.gif

1.3 代码实现

1.3.1 Latex代码:

max = \sum_{i=1}^{10}x_i * c_i
\sum_{i=1}^{10}x_i * a_i \leq b
x_i \in \{0,1\}
a_i , c_i > 0 

1.3.2 Lingo代码:

model:
sets:
CONSTRUCT/1..10/: C, A, X;
endsets
data:
a = 1000  1300  1260  1500  1420  1670  1340  1190  1720  1640;
c = 800 940 920 880 960 1000  870 840 1020  980;
b = 7200;
enddata
max = @sum(CONSTRUCT : x * c);
@sum(CONSTRUCT : x * a) <= b;
@for(CONSTRUCT : @bin(X));
end

1.3.4 解决方案

Global optimal solution found.
  Objective value:                              4720.000
  Objective bound:                              4720.000
  Infeasibilities:                              0.000000
  Extended solver steps:                               0
  Total solver iterations:                             0
                       Variable           Value        Reduced Cost
                              B        7200.000            0.000000
                          C( 1)        800.0000            0.000000
                          C( 2)        940.0000            0.000000
                          C( 3)        920.0000            0.000000
                          C( 4)        880.0000            0.000000
                          C( 5)        960.0000            0.000000
                          C( 6)        1000.000            0.000000
                          C( 7)        870.0000            0.000000
                          C( 8)        840.0000            0.000000
                          C( 9)        1020.000            0.000000
                         C( 10)        980.0000            0.000000
                          A( 1)        1000.000            0.000000
                          A( 2)        1300.000            0.000000
                          A( 3)        1260.000            0.000000
                          A( 4)        1500.000            0.000000
                          A( 5)        1420.000            0.000000
                          A( 6)        1670.000            0.000000
                          A( 7)        1340.000            0.000000
                          A( 8)        1190.000            0.000000
                          A( 9)        1720.000            0.000000
                         A( 10)        1640.000            0.000000
                          X( 1)        0.000000           -800.0000
                          X( 2)        1.000000           -940.0000
                          X( 3)        1.000000           -920.0000
                          X( 4)        1.000000           -880.0000
                          X( 5)        1.000000           -960.0000
                          X( 6)        0.000000           -1000.000
                          X( 7)        0.000000           -870.0000
                          X( 8)        0.000000           -840.0000
                          X( 9)        1.000000           -1020.000
                         X( 10)        0.000000           -980.0000
                            Row    Slack or Surplus      Dual Price
                              1        4720.000            1.000000
                              2        0.000000            0.000000

2 拓展问题求解--柴油发电或电网供电

20190613210719933.png

2.1 约束表达:

定义变量yj标识开采电力来源,若为柴油机发电取值为1;若为电网供电,取值为0

gif.gif

gif.gif

2.2 Latex代码:

\sum_{i=1}^{10} x_i * y_i * d_i \leq f
\sum_{i=1}^{10} 0.3 * x_i * (1 - y_i) * d_i \leq p

3 拓展问题--增加新约束

20190613211147981.png

3.1 约束表达:

image.png

3.2 Latex代码:

0 \leqslant  x_6 - x_8 \leq 1
0 \leqslant  x_5 + x_8 \leq 1
1 \leq x_2 + x_4 \leq 2
x_7 = x_8
x_1 + x_4 + x_6 + x_9 \leq 2

Lingo源码

model:
sets:
CONSTRUCT/1..10/: C, A, X;
endsets
data:
a = 1000  1300  1260  1500  1420  1670  1340  1190  1720  1640;
c = 800 940 920 880 960 1000  870 840 1020  980;
b = 7200;
enddata
max = @sum(CONSTRUCT : x * c);
@sum(CONSTRUCT : x * a) <= b;
@for(CONSTRUCT : @bin(X));
x6 - x8 <= 1;
x6 - x8 >= 0;
x5 + x3 <= 1;
(x4 + x2) >= 1;
x8 = x7;
x1 + x4 + x6 + x9 <= 2; 
end

3.3 结果展示

 Local optimal solution found.
  Objective value:                              4720.000
  Objective bound:                              4720.000
  Infeasibilities:                              0.000000
  Extended solver steps:                               3
  Total solver iterations:                           375
                       Variable           Value        Reduced Cost
                              B        7200.000            0.000000
                             X6        0.000000            0.000000
                             X8        0.000000            0.000000
                             X5        0.000000            0.000000
                             X3        2.000000            0.000000
                             X4        0.000000            0.000000
                             X2       0.5000000E-03        0.000000
                             X7        0.000000            0.000000
                             X1        0.000000            0.000000
                             X9        0.000000            0.000000
                          C( 1)        800.0000            0.000000
                          C( 2)        940.0000            0.000000
                          C( 3)        920.0000            0.000000
                          C( 4)        880.0000            0.000000
                          C( 5)        960.0000            0.000000
                          C( 6)        1000.000            0.000000
                          C( 7)        870.0000            0.000000
                          C( 8)        840.0000            0.000000
                          C( 9)        1020.000            0.000000
                         C( 10)        980.0000            0.000000
                          A( 1)        1000.000            0.000000
                          A( 2)        1300.000            0.000000
                          A( 3)        1260.000            0.000000
                          A( 4)        1500.000            0.000000
                          A( 5)        1420.000            0.000000
                          A( 6)        1670.000            0.000000
                          A( 7)        1340.000            0.000000
                          A( 8)        1190.000            0.000000
                          A( 9)        1720.000            0.000000
                         A( 10)        1640.000            0.000000
                          X( 1)        1.000000           -800.0000
                          X( 2)        1.000000           -940.0000
                          X( 3)        0.000000           -920.0000
                          X( 4)        0.000000           -880.0000
                          X( 5)        1.000000           -960.0000
                          X( 6)        1.000000           -1000.000
                          X( 7)        0.000000           -870.0000
                          X( 8)        0.000000           -840.0000
                          X( 9)        1.000000           -1020.000
                         X( 10)        0.000000           -980.0000
                            Row    Slack or Surplus      Dual Price
                              1        4720.000            1.000000
                              2        90.00000            0.000000
                              3        1.000000            0.000000
                              4        0.000000            0.000000
                              5        0.000000            0.000000
                              6        0.000000            0.000000
                              7        0.000000            0.000000
                              8        2.000000            0.000000

4 总结梳理


(1)当两个二进制变量存在依赖关系,先决变量取值应不大于后继变量

(2)第一部分和第三部分得到两个相同最优解值,但解的表达形式不一样。应进一步探索,Lingo内部的实现机制,以获取更多形式的最优解。

更多精彩欢迎关注个人公众账号


相关文章
|
编解码 人工智能
全球二氧化碳排放数据1deg产品(ODIAC)数据
全球二氧化碳排放数据1deg产品(ODIAC)数据
446 0
|
数据可视化 数据安全/隐私保护 Windows
忘记sa用户密码
忘记sa用户密码
815 0
忘记sa用户密码
|
10月前
|
运维 安全 Linux
阿里云操作系统迁移最佳实践
本次分享的主题是社区操作系统迁移和阿里云操作系统迁移。由龙溪社区王喆分享。 1. 操作系统生命周期 2. 操作系统迁移方案 3. 操作系统迁移流程 4. 操作系统迁移评估 5. 一站式迁移运维平台SysOM 6. SMC操作系统迁移实践
344 2
|
网络协议 Linux 开发工具
Linkedin-SRE-中文教程-一-
Linkedin-SRE-中文教程-一-
|
存储 运维 负载均衡
构建高可用的 ChunkServer 系统
【8月更文第30天】在分布式文件系统中,ChunkServer(也称为 DataNode)负责存储文件的数据块(chunks)。为了保证系统的高可用性和数据冗余,需要设计一种可靠的 ChunkServer 部署方案。本文将探讨如何设计和实现一个高可用的 ChunkServer 系统,并通过具体的代码示例来展示其实现细节。
291 0
|
人工智能
写歌词的技巧和方法基础教程:引领你走进音乐世界,妙笔生词智能写歌词软件
音乐是灵魂的语言,歌词则是承载灵魂的载体。本文介绍写歌词的基础技巧,包括寻找灵感、确定主题、构建结构和运用语言,同时推荐《妙笔生词智能写歌词软件》作为创作助手,助力你走进丰富多彩的音乐世界。
|
存储 JSON 前端开发
一文搞懂 Go 1.21 的日志标准库 - slog
一文搞懂 Go 1.21 的日志标准库 - slog
609 2
|
JavaScript Java
el标签
el标签
|
Java 应用服务中间件 Android开发
javax.servlet包报错和javax.servlet.jsp.JspException
以前用myeclipse 最近用eclipse myeclipse项目正常 eclipse不正常
787 0
|
Web App开发 Ubuntu 安全
Parallels Desktop18最新版虚拟机功能特性介绍
总之,如果你正使用Mac电脑,并且要使用其他系统平台的软件,尤其是Windows软件的话,那么使用虚拟机将会是比使用 BootCamp安装原生双系统更加方便,功能更丰富!
1333 0