01:// --------------------------------------------------------------------------
02:// 授权材料 -IBM的财产
03://
04://5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55
05: ''//IBMCorporation 1998, 2013 版权所有。 保留所有权利 (All rights reserved)。
06://
07://U.S用户须知:权利受限:
08:// 受 GSA ADP 附表限制的使用、复制或披露
09:// 与IBM公司签订合同
10: // --------------------------------------------------------------------------
11:
12:/* 露天开采。
13: ''来自H.P 威廉姆斯,数学编程中的模型构建
14: 问题12.14
15:
16: 文档中描述了这种模式。
17:参见 IDE 和 OPL > 语言和接口示例。
18: */
19:int NbLevels= .....;
20:范围Level =1..NbLevels;
21:
22:元组 blockType{
23:浮子纯度;
24:intlevel;
25:intx;
26:inty;
27:};
28:
29:floatCost[Level] = .....;
30:float PureValue= .....;
31:{blockType}块 = .....;
32:{blockType}Ontop[jinBlocks] =
33: {i | iinBlocks:j.level==i.level- 1 &&
34: ((j.x+ 1 ==i.x&&j.y+ 1 ==i.y) |||
35:j.x- 1 ==i.x&&j.y+ 1 ==i.y) ||
36:j.x+ 1 ==i.x&&j.y- 1 ==i.y) ||
37:j.x- 1 ==i.x&&j.y- 1 ==i.y) )};
38:intMinx =min(iinBlocks)i.x;
39:intMiny =min(iinBlocks)i.y
40:intMaxx =max(iinBlocks)i.x;
41:intMaxy =max(iinBlocks)i.y;
42:范围XRange = Minx...Maxx;
43:范围YRange = Miny...Maxy;
44:
45:元组旅行 {
46:intx;
47:inty;
48:intz;
49:};
50:
51:{trips}There = {<x,y,z> | <p,z,x,y>inBlocks};
52:{trips}Allposs = {<x,y,z> | x 在 XRange中,y 在 YRange中,z 在 Level中};
53:{trips}Notthere = Allposs差There;
54:
55:
56:dvar 布尔值提取[块];
57:dvar booleanXYZ[Level][XRange][YRange];
58:
59:dexpr floatObjective =
60:sum(iinBlocks) Extract[i] *i.purity*PureValue/100.0- Costi.level]);
61:
62:最大化目标;
63:
64: 议题 至 {
65:forall(iinBlocks:i.level<NbLevels)
66:forall(jinOntop[i])
67: Extract[i] >= Extract[j];
68:
69:forall(iinBlocks) {
70: 'ctBlocks:XYZ[i.level][i.x][i.y] == Extract[i];
71: }
72:
73:forall(iinNotthere) {
74: 'ctNotThere:XYZ[i.z][i.x][i.y] == 0;
75: }
76:}
77:
78:
79:元组 ExtractSolutionT{
80:blockType块;
81:int值;
82:};
83:{ExtractSolutionT} ExtractSolution= {<i0,Extract[i0]> | i0inBlocks};
84:元组 XYZSolutionT{
85:intLevel;
86:intXRange;
87:intYRange;
88:int值;
89:};
90: '{XYZSolutionT}XYZSolution = {<i0,i1,i2,XYZ[i0][i1][i2]> | i0 '于Level,i1 '于XRange,i2 '于YRange};
91: