2012-03-15 2 views
1

Я пишу свою первую программу GNU MathProg (AMPL), чтобы найти экземпляры подсчета минимального экземпляра (вершины) топологии HyperX (график) для заданного радикса, количества хостов , и полосу пропускания пополам. Это простая первая программа, потому что все уравнения описаны в следующей статье: http://cal.snu.ac.kr/files/2009.sc.hyperx.pdfMathProg (AMPL) - переменная матрица, измененная другой переменной

Я прочитал спецификации и примеры программ, но я застрял на очень простой синтаксической ошибке. Мне нужно иметь следующие две переменные: L, количество измерений в сети и массив S длины L, где каждый элемент S - это количество переключателей в каждом измерении. В моей программе MathProg, я хотел бы выразить это так:

var L >= 1, integer; 
var S{1 .. L} >= 2, integer; 

Однако, когда я бегу $ glpsol --check --math hyperx.mod, я получаю следующее сообщение об ошибке:

hyperx.mod:28: operand following .. has invalid type 
Context: ...isec ; param radix ; var L >= 1 , integer ; var S { 1 .. L } 

Если кто-нибудь может помочь объяснить, как я должен правильно выразить эти отношения, Я буду благодарен. Кроме того, я включаю всю программу, которую я написал для справки и дополнительной помощи. Я ожидаю, что в моей программе будет много синтаксических ошибок, но пока я не исправлю первый, у меня нет способа найти остальное.

/* 
* A MathProg linear program to find an optimal HyperX topology of a 
* given network size, switch radix, and bisection bandwidth. Optimal 
* is simplistically defined as minimum switch count network. 
* 
* A HyperX topology is a multi-dimensional network (graph) where, in 
* each dimension, the switches are fully connected. Every switch 
* (vertex) is a point in an L-dimensional integer lattic. Each switch 
* is identified by a multi-index I = (I_1, ..., I_L) where 0 <= I_k < 
* S_k for each k = 1..L, where S_k is the number of switches in each 
* dimension. A switch connects to all others whose multi-index is the 
* same in all but one coordinate. 
*/ 

/* Network size in number of hosts. */ 
param hosts; 

/* Desired bisection bandwidth. */ 
param bisec; 

/* Maximum switch radix. */ 
param radix; 

/* The number of dimensions in the HyperX. */ 
var L >= 1, integer; 

/* The number of switches in each dimension. */ 
var S{1 .. L} >= 2, integer; 

/* 
* Relative bandwidth of the dimension, i.e., the number of links in a 
* given dimension. 
*/ 
var K{1 .. L} >= 1, integer; 

/* The number Terminals (hosts) per switch */ 
var T >= 1, integer; 

/* Minimize the total number of switches. */ 
minimize cost: prod{i in 1..L} S[i]; 

/* The total number of links must be less than the switch radix. */ 
s.t. Radix: T + sum{i in 1..L} K[i] * (S[i] - 1) <= radix; 

/* There must be enough hosts in the network. */ 
s.t. Hosts: T * prod{i in 1..L} S[i] >= hosts; 

/* There must be enough bandwidth. */ 
s.t. Bandwidth: min{K[i]*S[i]}/(2 * T) >= bisec; 

/* The order of the dimensions doesn't matter, so constrain them */ 
s.t. SwitchDimen: forall{i in 1..(L-1)} S[i] <= S[i+1]; 

/* 
* Bisection bandwidth depends on the smallest S_i * K_i, so we know 
* that the smallest switch count dimension needs the most links. 
*/ 
s.t. LinkDimen: forall{i in 1..(L-1)} K[i] >= K[i+1]; 

# TODO: I would like to constrain the search such that the number of 
# terminals, T, is bounded to T >= (hosts/O), where O is the switch 
# count of the smallest switch count topology discovered so far, but I 
# don't know how to do this. 

/* Data section */ 
data; 

param hosts := 32 

param bisec := 0.5 

param radix := 64 

end; 

ответ

0

Fixed число переменных в задаче является общим предположением решателей и алгебраических языков моделирования, включая AMPL/MathProg. Поэтому вы можете использовать только постоянные выражения, в частности параметры, а не переменные в выражениях индексирования. Одно из возможных решений состоит в том, чтобы сделать параметр L, решить вашу проблему для разных значений L и выбрать тот, который дает лучшее объективное значение. Это можно сделать с помощью простого сценария AMPL.

Смежные вопросы