【问题标题】:No Primal Feasible Solution, GLPK没有最初可行的解决方案,GLPK
【发布时间】:2018-01-18 10:16:39
【问题描述】:

我不知道这个模型有什么问题。我不断得到一个没有原始可行解决方案的错误。看来问题出在 Stope_i 约束上。我认为约束存在一些误传。有人可以帮忙吗?

#parameters

param n := 13;
param m := 8;
param k := 2;
param l := 2;
param p:= k-1 ;
param q:= l-1;

#set of items

#set I;
#set J;

set I := {1 .. n} ;
set J := {1 .. m} ;
set P := {1 .. n-p};
set Q := {1 .. m-q};


#parameters


param V{I, J};



# Decision variables
var x{I, J} >= 0, <= 1;
#printf (V[3,1]);

#check:      sum {i in I, j in J} V[i, j] * x[i, j] = 12;
maximize z: sum {f in I, g in J} V[f, g] * x[f, g];

subject to StopeB{g in P, h in Q}:
        sum{i in g .. g+p, j in h..h+q} x[i,j] <= 1;

#subject to Stope_i{g in P, h in Q}:
#        x[g,h] - sum{j in h+1..h+q} x[g,j] = 1;

#subject to Stope_j{g in P, h in Q}:
#        x[g,h] - sum{i in g+1..g+p} x[i,h] = 1;

#subject to Stope_ij{g in P, h in Q}:
#        x[g,h] - sum{i in g+1..g+p, j in h+1..h+q} x[i,j] = 1;

#subject to Stope_im{g in P, h in Q}:
#        x[g,h] - sum{i in g+1..g+p, j in h+l..m-1} x[i,j] = 1;

data;

param V: 1 2 3 4 5 6 7 8 :=
1       -25  -9  14   21 50  13   78  37     
2        14  11  14  17  -43  -30  68  75    
3        2   7   18  -44  -63  4   4   72    
4        -8  4   18   -63  -36  60   41   80    
5       -8   6   18   -28  -27  22    52   55   
6        -8  8   18   -8  3  21  30   19 
7       -4   9   17   18  27  16  -45   -58    
8        26  16  7    21 -22  -30   -38   -53  
9        36  11  6   43   -4  -31  78   105   
10       8   -1   -51   -15   50  12   122    154  
11       4  7   -49  -38  30  15   61   71  
12       30  11  0   20   23  21   29   -43   
13       -2   -11  -59  -22   52   -9   -1   -20  ;

end;

【问题讨论】:

  • 那是什么建模语言?
  • @mattmilten,这是 GLPK。

标签: optimization linear-programming glpk


【解决方案1】:

这是我使用PySCIPOpt 为您的模型编写的python 代码:

from pyscipopt import Model, quicksum

model = Model()

n = 13
m = 8
k = 2
l = 2
p = k-1
q = l-1

I = range(n)
J = range(m)
P = range(n-p)
Q = range(m-q)

x = {}
v = [[-25,-9,14,21,50,13,78,37],
     [14,11,14,17,-43,-30,68,75],
     [2,7,18,-44,-63,4,4,72],
     [-8,4,18,-63,-36,60,41,80],
     [-8,6,18,-28,-27,22,52,55],
     [-8,8,18,-8,3,21,30,19],
     [-4,9,17,18,27,16,-45,-58],
     [26,16,7,21,-22,-30,-38,-53],
     [36,11,6,43,-4,-31,78,105],
     [8,-1,-51,-15,50,12,122,154],
     [4,7,-49,-38,30,15,61,71],
     [30,11,0,20,23,21,29,-43],
     [-2,-11,-59,-22,52,-9,-1,-20]]

for i in I:
    for j in J:
        x[i,j] = model.addVar(vtype = 'BINARY', name = 'x_{}_{}'.format(i,j))

model.setObjective(quicksum([v[i][j] * x[i,j] for i in I for j in J]), sense = 'maximize')

for g in P:
    for h in Q:
        model.addCons(quicksum(x[i,j] for i in range(g,g+p) for j in range(h,h+q)) <= 1)

for g in P:
    for h in Q:
        model.addCons(x[g,h] - quicksum(x[g,j] for j in range(h+1,h+q)) == 1)

for g in P:
    for h in Q:
        model.addCons(x[g,h] - quicksum(x[i,h] for i in range(g+1,g+p)) == 1)

for g in P:
    for h in Q:
        model.addCons(x[g,h] - quicksum(x[i,j] for i in range(g+1,g+p)) == 1)

for g in P:
    for h in Q:
        model.addCons(x[g,h] - quicksum(x[i,j] for i in range(g+1,g+p) for j in range(h+1,m-1)) == 1)

model.optimize()

for i in I:
    print([model.getVal(x[i,j]) for j in J])

它返回一个最优解:

SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 0.01
Solving Nodes      : 1
Primal Bound       : +1.40200000000000e+03 (2 solutions)
Dual Bound         : +1.40200000000000e+03
Gap                : 0.00 %
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -0.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -0.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -0.0]
[-0.0, -0.0, -0.0, -0.0, 1.0, -0.0, -0.0, -0.0]

【讨论】:

  • 首先,感谢大家抽出宝贵时间将代码转换为 Python,Matt!你能和我分享一下你安装了什么包来用 Python 做 LP 吗?它是专有的吗?我想在这里运行我这边的代码,看看它是如何工作的,因为根据我们对模型和约束的定义,这里提出的解决方案是不可行的。
  • 我的模型或您的描述中可能有错字。 PySCIPOpt 不会默默地计算一个不可行的解决方案并声称最优。
  • 好的,谢谢。我正在更多地考虑仍然需要适当制定的模型。我会调查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2012-11-14
  • 1970-01-01
  • 2021-05-07
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多