
线性规划线性规划是一个优化问题,其中目标函数和约束是线性的。它是运筹学的一个重要分支,研究早,发展快,应用广,方法成熟。它是一种辅助人们进行科学管理的数学方法,简称LP。
一、业务问题描述:这是一个简单的线性规划问题,具体要求如下:
一家公司生产氨(NH3)和氯化铵(NH4CI)。该公司的日处理能力为50单位氮、180单位氨和40单位氯。氨的利润是30美元/单位,氯化铵的利润是40美元/单位。如何确定氨和氯化铵的产量使利润最大化?
二、从数学的角度理解并定义这个问题:
将上述生产问题转化为数学问题,建立数学模型,一般有以下三个步骤:
1.根据影响要达到的目的的因素,寻找决策变量;
2.目标函数由决策变量和目标之间的函数关系决定;
3.决策变量要满足的约束条件由约束决定。
三、建立OPL模型的步骤
下面用OPL语来理解和定义这个问题。OPL模型是寻找决策变量,使其满足约束条件,并获得目标函数最大值的过程。以下是解决这个问题的几个步骤:
1.定义问题的数据变量,
为了方便起见,下面定义的数据变量都是数组变量。数组是有序数据的集合,数组中的每个元素都属于相同的数据类型。
(1)产品代表气体的名称,
{ string }产品=.
也就是说,该数组被定义为名为“Products”的字符串数组和一维数组。
(2)组件表示包含的组件,
{string}组件=.
也就是说,名为“Components”的数组被定义为字符串数组和一维数组。
(3)需求代表每种气体的成分,
浮动需求[产品][组件]=.
即一个名为“Demand”的数组定义为浮点数组和二维数组。
(4)利润代表相应气体的利润,
浮动利润[产品]=.
即一个名为“Profit”的数组定义为浮点数组和一维数组。
(5)库存代表配料的日加工能力,
浮存股票[组件]=.
也就是说,名为“股票”的数组被定义为浮点数组和一维数组。
2.数据的初始化;
定义数据变量后,需要进行数据初始化。所谓初始化,就是给数据变量赋值。以下值依次分配给上面定义的数据变量:
products={ ' NH3 ' ' NH4Cl ' };
components={ ' N ' ' H ' ' CI ' };
demand=[[1 3 0][1 4 1]];
利润=[30 40];
stock=[50 180 40];
3.定义决策变量。数据变量不同于决策变量。数据变量是具体数据的名称,比如之前定义的数据变量“产品”,代表公司生产的气体的名称,而决策变量是针对数学模型的。这个问题要做的决定是每种气体的产量。
dvar彩车生产[产品];
Dvar(决策变量)是定义决策变量最常用的关键字之一。
这里定义了一个名为“Production”的决策变量,代表两种气体的产量,它实际上是一个浮点数组。
4.目标函数的定义,即利润最大化,它是决策变量的线性函数。
达到最大值
总和(产品中的p)
利润[p] *产量[p];
5.约束条件的设置,有三个组件带有日处理能力的限制,以非常简洁的方式实现:
服从于{
forall(组件中的c)
联系类型:
总和(产品中的p)
需求[p][c] *产量[p]=库存[c];
}
四、使用IBM ilog CPL ex optimization studio 12.8解决此问题。
IBM ilog CPL ex optimization studio 12.8解决这个问题的具体操作流程如下:
打开软件界面,有四个常用窗口,分别是OPL项目导航窗口、编辑窗口、问题浏览器窗口和输出窗口;
创建一个名为“气态”的OPL项目,勾选“添加默认运行配置”、“创建模型”、“创建数据”,即OPL项目包含一个模型文件和一个数据文件;
编辑模型文件的内容,即“gaseous.mod”文件。
模型文件的内容包括四个部分:
(1)定义数据变量;
(2)定义决策变量;
(3)设定目标函数;
(4)设置约束条件;
编辑数据文件的内容,即“gaseous.dat”文件。
然后在“配置(默认)”上执行:
运行配置以获得以下输出:
五、业务解释
从IBM ILOG CPLEX Optimization Studio 12.8的运行结果可知,当氨产量为6.6667单位,氯化铵产量为40单位时,公司获得最大利润,满足当天各组分的处理能力限制。









