一个简单的线性规划问题

电子说

1.2w人已加入

描述

Linear Programming线性规划,就是目标函数和约束条件都是线性的优化问题,是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法,英文缩写LP。

一、业务问题描述:这是一个简单的线性规划问题,具体要求如下:

某公司生产氨气(NH3)和氯化铵(NH4CI), 公司的日处理能力为50单位的氮(N), 180单位的氨(H), 40单位氯(CI).  氨气的利润为30$/每单位、氯化铵的利润为40$/每单位,如何确定氨气和氯化铵的产量,使利润最大?

二、从数学的角度理解和定义该问题:

将上述生产问题转为为数学问题,建立数学模型一般有以下三个步骤:

1.      根据影响所要达到目的的因素找到决策变量;

2.      由决策变量和所在达到目的之间的函数关系确定目标函数;

3.      由决策变量所受的限制条件确定决策变量所要满足的约束条件。

三、OPL模型建立的步骤

下面用OPL语言来理解和定义该问题,OPL模型就是寻找决策变量,使得决策变量满足约束条件并取得目标函数最值的过程。下面是求解该问题的几个步骤:

1.      定义该问题的数据变量,

为了方便起见,以下定义的数据变量均为数组变量,数组是有序数据的集合,一个数组中的每一个元素都属于同一种数据类型。

(1)Products                       代表气体的名称,

{string}Products = ...;

即定义了数组名为“Products”的字符串数组,一维数组。

(2)Components              代表所含的成分,

{string} Components = ...;

即定义了数组名为“Components”的字符串数组,一维数组。

(3)Demand                  代表每种气体所含的成分,

floatDemand[Products][Components] = ...;

即定义了数组名为“Demand”的浮点型数组,二维数组。

(4)Profit              代表对应气体的利润,

float Profit[Products] =...;

即定义了数组名为“Profit”的浮点型数组,一维数组。

(5)Stock      代表该成分的日处理能力,

float Stock[Components] =...;

即定义了数组名为“Stock”的浮点型数组,一维数组。

2.      数据的初始化;

定义了数据变量之后,要进行数据的初始化,所谓初始化就是给数据变量赋值,下面依次给上述定义的数据变量赋值:

Products = { "NH3" "NH4CI"};

Components = { "N" "H" "CI"};

Demand = [ [1 3 0] [1 4 1] ];

Profit = [30 40];

Stock = [50 180 40];

3.      定义决策变量,数据变量和决策变量是有区别的,数据变量是具体数据的名称,比如之前定义的数据变量“Products”,代表该公司生产气体的名称,而决策变量是针对数学模型来说的,这个问题所需做的决策即每种气体的产量,

dvar float+Production[Products];

dvar(decision variable)是定义决策变量的一个最常用的关键字,

此处定义了变量名为”Production”的决策变量,代表两种气体的产量,其实是浮点型数组。

4. 目标函数的定义,即利润最大化,目标函数是决策变量的线性函数,

maximize

sum( p in Products )

Profit[p] * Production[p];

5. 约束条件的设定,有三种成分有日处理能力的限制,用很简洁的写法实现:

subject to {

forall( c in Components )

ct:

sum( p in Products )

Demand[p][c] * Production[p] <= Stock[c];

}

四、用IBM ILOG CPLEX Optimization Studio 12.8来求解该问题

IBM ILOG CPLEX Optimization Studio 12.8来求解该问题的具体操作过程如下:

打开软件界面,有四个常用的窗口,分别是OPL项目导航窗口、编辑窗口、问题浏览器窗口、输出窗口;

线性

新建一个OPL项目,项目名称是“gaseous”,勾选”Adda default Run Configuration”、“CreateModel”和“CreateData”,即该OPL项目包含一个模型文件和一个数据文件;

线性

线性

编辑模型文件的内容,即“gaseous.mod”文件

线性

该模型文件的内容包含四部分内容: 

(1) 定义数据变量;

(2)  定义决策变量;

(3)  设定目标函数;

(4)  设定约束条件;

编辑数据文件的内容,即“gaseous.dat”文件

线性

然后在”Configuration(default)”上执行:

线性

执行 Run Configuration,得到如下输出结果:

线性

五、业务解读

从IBM ILOG CPLEX Optimization Studio 12.8的运行结果,可知当氨气的产量为6.6667个单位,氯化铵的产量为40个单位时,该公司得到最大利润,并满足当日每种成分的处理能力限制。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分