【问题标题】:How to create new Constraints in TSP with GLPK如何使用 GLPK 在 TSP 中创建新的约束
【发布时间】:2015-02-09 22:42:11
【问题描述】:

我用这个例子TSP 来计算旅行。

但是如何创建新的约束呢?

想象一个简单的例子,我有 5 个城市,但是每个城市都没有道路,所以我想用新的限制来消除没有路段,我在 GLPK 中怎么做?

【问题讨论】:

    标签: ampl glpk


    【解决方案1】:

    这是AMPL(Glpk 使用的 GNU MathProg 的超集)中的 TSP 问题示例,取自 here

    set S ordered;
    param n := card {S};
    
    set SS := 0 .. (2**n - 1);
    
    set POW {k in SS} := {i in S: (k div 2**(ord(i)-1)) mod 2 = 1};
    
    
    set LINKS := {i in S, j in S: ord(i) < ord(j)};
    
    param cost {LINKS} >= 0;
    var X {LINKS} binary;
    
    minimize TotCost: sum {(i,j) in LINKS} cost[i,j] * X[i,j];
    
    subj to Tour {i in S}: 
       sum {(i,j) in LINKS} X[i,j] + sum {(j,i) in LINKS} X[j,i] = 2;
    
    subj to SubtourElim {k in SS diff {0,2**n-1}}:
       sum {i in POW[k], j in S diff POW[k]: (i,j) in LINKS} X[i,j] +
       sum {i in POW[k], j in S diff POW[k]: (j,i) in LINKS} X[j,i] >= 2;
    
    
    data;
    
    set S := a b c d ;
    
    param cost:  a   b   c   d :=
            a    .  43  21  19
            b    .   .  21  12
            c    .   .   .  39
            d    .   .   .   . ;
    

    如果您没有每个城市之间的链接,您可以通过仅提供 LINKS 集合中的现有链接来对其进行建模,例如:

    # model:
    set LINKS;
    # data:
    set LINKS := (a b) (b d);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多