2013-05-10 22 views
1

我对AMPL的数学问题的处方存在问题。解决CDN分配规则时的问题

我试图解决此问题:与一组的节点N和一组边E的各节点具有存储到缓存内容

在一个网络中。有一组内容对象被客户端访问,如果需要可以被缓存。让o∈O的大小等于h_o个存储单位。假设每个节点n∈N具有请求对象o∈0的客户端,以便向n下载的流量o等于d_n; o。在托管内容交付网络(CDN)中,CDN运营商可以采用各种策略在缓存之间分配内容副本。这些政策可能取决于许多因素,这些因素可能是技术或业务性质的问题,这会导致不同寻常的优化问题。设h_max是CDN可以使用的最大总存储量(即CDN在所有节点上使用的存储量之和)。查找:每个对象的副本的分配o∈O,使得CDN使用的总存储限制被满足,同时最小化网络中的总体trac(即,从高速缓存到客户机节点的路由成本)

幅值文件:

#Model for 'CDN allocation copies' problem 

#sets 
#------------------------------------------------------------------------------------- 
set K;    #index of nodes with group of clients 
set N;    #nodes 
set E;    #edges 
set O;    #objects 

#parameters 
#------------------------------------------------------------------------------------- 
param d {K,O};  #demands for object o 
param t {K,O} symbolic;  #destination nodes 
param r {N,K} binary;  #1 if node n is ancestor of node k, 0 otherwise 

param a {N,E} binary;  #1 if edge begins in vertex, 0 otherwise 
param b {N,E} binary;  #1 if edge ends in vertex, 0 otherwise 

param c {E};  #cost of using an edge 
param Hmax;   #available capacity for allocation object in proxy servers 

#variables 
#------------------------------------------------------------------------------------- 
var f {N,O} binary;   #1 if object saved at node k, 0 otherwise 
var x {E,K,O};    #value of the demand realised over edge for object 

#goal function 
#------------------------------------------------------------------------------------- 
#The function minimizes cost of routing 
#By saving copies at CDN proxies we minimizing all traffic from all demands 
#with all objects 
minimize goal: 
    sum{e in E} 
    sum{k in K} 
    sum{o in O} 
     (x[e,k,o]*c[e]); 

#constraints 
#------------------------------------------------------------------------------------- 
subject to c0 {e in E, k in K, o in O}: 
    x[e,k,o]>=0; 

subject to c1a {k in K, o in O, n in N: n!=t[k,o]}: 
(r[n,k]==1 and f[n,o]==1) 
    ==> 
     sum{e in E} 
      (a[n,e]*x[e,k,o]) - 
     sum{e in E} 
      (b[n,e]*x[e,k,o]) = 
           d[k,o]*(1-f[k,o]) 
    else 
     sum{e in E} 
      (a[n,e]*x[e,k,o]) - 
     sum{e in E} 
      (b[n,e]*x[e,k,o]) = 
           0; 

subject to c1c {k in K, o in O, n in N: n==t[k,o]}: 
sum{e in E} 
    (a[n,e]*x[e,k,o]) - 
sum{e in E} 
    (b[n,e]*x[e,k,o]) = 
          -d[k,o]*(1-f[k,o]); 

subject to c2: 
sum{k in K} 
sum{o in O} 
    f[k,o] <= Hmax; 

subject to c3 {k in K, o in O}: 
sum{n in N} 
    r[n,k]*f[n,o] <= 2; 

subject to c4 {o in O}: 
    f[1,o]=1; 

我的数据文件:

#Data file for 'CDN allocation copies' problem simple example 

#indices 
set K := 2 3;    #index of nodes with group of clients 
set N := 1 2 3;    #nodes 
set E := 1_2 1_3;   #edges 
set O := o1 o2 o3 o4 o5 o6 o7 o8 o9 o10; #objects 

#parameters 
param d (tr):     #demands for object o 
     2  3 := 
o1 2560 512 
o2 1280 256   
o3 640 128 
o4 320  64 
o5 160  32 
o6 80  16 
o7 40  8 
o8 20  4 
o9 10  2 
o10 5  1; 
#opt= 63 + 75 = 138 

param t (tr):     #destination nodes 
     2  3 := 
o1  2  3 
o2  2  3 
o3  2  3 
o4  2  3 
o5  2  3 
o6  2  3 
o7  2  3 
o8  2  3 
o9  2  3 
o10  2  3; 

param r (tr):     #1 if node n is ancestor of node k, 0 otherwise 
     1  2  3 := 
2  1  0  0 
3  1  0  0; 

param a (tr):     #1 if edge begins in vertex, 0 otherwise 
     1  2  3 := 
1_2  1  0  0 
1_3  1  0  0; 

param b (tr):     #1 if edge ends in vertex, 0 otherwise 
     1  2  3 := 
1_2  0  1  0 
1_3  0  0  1; 

param c :=  #cost of using an edge 
1_2  1 
1_3  1; 

param Hmax := 10; #available capacity for allocation object in proxy servers 

当我试图解决我的问题,我看到了这个bug:

Error at _cmdno 15 executing "let" command 
(file C:\Program Files\AMPLDevX64 Evaluation\plugins\com.ampldev_2.3.0.201211162252 \include/writesol.ampl, line 22, offset 783): 
Can't evaluate _con[92]: 
subscript not in 1 .. 91 

回答

1

该错误是由AMPL错误引起的,包括_ncons中的逻辑约束条件数。它在AMPL版本20130510中被修复(见http://www.netlib.org/ampl/changes)。您的模型中的逻辑约束是指标约束c1a

+0

非常感谢您的帮助!我编辑我的模型文件,并添加更简单的数据文件,我在这里发布: http://stackoverflow.com/questions/16500128/ampl-ecopy-error-causing-by-comparison-indices-element-of-set-with-变量 – 2013-05-11 17:59:01