文/彭勇
摘要:AIMMS软件为决策支持系统实现模型和数据的分离管理提供了方便,也为解决高度复杂的数学规划问题提供了更简洁的管理方式。本文结合一个运输问题的实例,讨论了AIMMS访问Access的数据库的基本方法,并给出了采用指示符约束构建运输问题通用模型的方法。
教育期刊网 http://www.jyqkw.com
关键词 :AIMMS;数据库;决策支持系统;数学规划
引言
A IMMS是A d v a n c e d I n t e g r a t e d Mu l t i d ime n s i o n a lModeling Software的缩写,是Paragon Decision Technology公司开发的集成化数学建模工具,被认为是目前世界上最先进的决策支持系统环境[1]。广泛应用于供应链管理、森林规划、能源管理、生产规划、库存管理、风险收益资产管理等等许多运筹管理和优化领域。
AIMMS的优势之一就是采用计算机求解数学模型时, 不需要扩展书写形式,从而使得复杂的模型仅仅采用一句话就可以实现。比如,如下一个约束不等式
yij ≤ xj
如果采用其它数学建模工具,需要列出所有i和j的组合,这样模型就会很复杂。但如果采用AIMMS,可以采用
CONSTRAINT:
identifier : xyconstraint
index domain : (i,j)
definition : y(i,j)<=x(j)
很简单表示出来。
在决策支持系统开发过程中,强调模型库和数据库的分离,所以当数据库中的数据变化时,不需要更改模型,可以直接采用模型来求解。AIMMS为决策支持系统的开发提供了简单明了的模型管理方式,但是,如何从数据库中导出数据为模型提供呢,报道比较少。文章正是基于这种思想,对AIMMS访问数据库的方法进行了探讨,并给结合实例介绍了具体的实现过程。为了讲述方便,我们在下文的组织结构中,以运输问题为实例, 讨论了当数据存储在Access数据库中,如何用AIMMS访问数据,同时,也讨论一下如何建立通用运输问题的AIMMS模型。
1、AIMMS访问ACCESS数据库
例(运输问题)[3]设某产品从产地A1、A2、A3运往需求地B1、B2、B3、B4,产量、需求量和单位运价见表1所示。问如何调运才能使总运费最少?
建立该问题的数学模型见《电子商务》2 0 1 5年第六期《AIMMS访问Excel方法》一文。
当数据存放在Access数据库中,AIMMS提供了ODBC或这OLE等方法来实现方法。我们假定例题中需求数据在数据库transport.mdb中,它包含3张数据表Customer、Plant和TransportPrice,其结构如表2、表3、表4。
通过ODBC映射关系,数据库Transport.mdb的访问采用wjf2.dsn作为数据源。为此我们给出三个数据表的定义如下。
DATABASE TABLE:
identifier: dbtable_Plants
data source: "wjf2.dsn"
table name: "Plant"
mapping:
"Plant_Name"-->p,
"Plant_Supply"-->Supply(p);
DATABASE TABLE:
identifier: dbtable_Customers
data source: "wjf2.dsn"
table name: "Customer"
mapping:
"Customer"-->c,
"Customer_Demand"-->Demand(c);
DATABASE TABLE:
identifier: dbtable_Price
data source: "wjf2.dsn"
table name: "TransportPrice"
mapping:
"Plants" -->p,
"Customer"-->c,
"TransportPrice"-->UnitPrice(p,c);
下面,我们给出主执行程序。
PROCEDURE
identifier:MainExecution
body:
read from table dbtable_Plants;
read from table dbtable_Customers;
read UnitPrice(p,c) from table dbtable_Price
solve LeastCostTransportPlan;
ENDPROCEDURE;
2、AIMMS模型的通用性问题
在前面,我们讨论的都是供需平衡的运输问题,但是实际情况不完全这样。由于用户数据的不确定性,供需不平衡的情况是不可避免的。AIMMS提供了各种方法来组合各种约束关系,这里我们介绍一下指示符约束(indicator constraints)。
指示符约束是一种控制约束的方法,其作用通过一个{0,1}变量的变化来控制。其实,这种方法就是传统的大M法实现。
我们可以把例1中的约束写出如下形式
在用AIMMS实现这两部分的约束时,我们定义一个指示符变量y∈{0,1}。并令满足条件(1)时,y=1;满足条件(2)时,
y=0。则AIMMS的所有约束定义如下:
CONSTRAINT:
dentifier: ConstraintSgD1
index domain: (p)
property: IndicatorConstraint
activating condition: y=1
definition: sum[c,TransportAmount(p,c)]<=Supply(p);
CONSTRAINT:
identifier: ConstraintSgD2
index domain: (c)
property: IndicatorConstraint
activating condition: y=1
definition: sum[p,TransportAmount(p,c)]=Demand(c);
CONSTRAINT:
identifier: ConstraintSsD1
index domain: (p)
property: IndicatorConstraint
activating condition: y=0
definition: sum[c,TransportAmount(p,c)]=Supply(p);
CONSTRAINT:
identifier: ConstraintSsD2
index domain: (c)
property: IndicatorConstraint
activating condition: y=0
definition: sum[p,TransportAmount(p,c)]<=Demand(c);
优化开始前,在主程序中先给出y的定义部分如下:
if sum[p,Supply(p)]>=sum[c,Demand(c)] then
y:=1
else
y:=0
endif;
3、结束语
文章以运输问题为实例,讨论了AIMMS访问Access数据库的方法,同时介绍了了在供需平衡未知的情况下,如何采用指示符约束构建统一的运输问题模型。AIMMS的这种模型和数据的分离,为决策支持系统建立统一的模型库提供了技术基础。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] Paragon Decision Technology. AIMMS: The User’s Guide[EB/OL] (April 3, 2011).
[2] 陈文伟. 决策支持系统教程(第二版)[M].北京:清华大学出版社,2010.
[3] 朱道立,徐庆,叶耀华. 运筹学[M]. 北京: 高等教育出版社,2006.
作者简介:
彭勇,工程师,所在单位:西安财经学院,研究领域:系统分析与优化、智能决策。