我正在根据激光切割机所需的表面来优化字母的选择,以最大程度地形成可以形成的单词的总频率。我为GLPK编写了此程序:
set unicodes;
param surfaces{u in unicodes};
table data IN "CSV" "surfaces.csv": unicodes <- [u], surfaces~s;
set words;
param frequency{w in words}, integer;
table data IN "CSV" "words.csv": words <- [word], frequency~frequency;
然后,我想提供一个表格,为每个单词提供每个字符及其unicode的计数。集words
和unicodes
已经定义。根据手册第42页,我可以省略集合和定界符:
table name alias IN driver arg . . . arg : set <- [fld, ..., fld], par~fld, ..., par~fld;
...
set是称为控制集的可选简单集的名称。它可以与 分隔符<-;
所以我这样写:
param spectrum{w in words, u in unicodes} >= 0;
table data IN "CSV" "spectrum.csv": words~word, unicodes~unicode, spectrum~spectrum;
我得到了错误:
Reading model section from lp...
lp:19: delimiter <- missing where expected
Context: ..., u in unicodes } >= 0 ; table data IN '...' '...' : words ~
如果我写:
table data IN "CSV" "spectrum.csv": [words, unicodes] <- [word, unicode], spectrum~spectrum;
我得到了错误:
Reading model section from lp...
lp:19: syntax error in table statement
Context: ...} >= 0 ; table data IN '...' '...' : [ words , unicodes ] <-
如何读入已定义了两组数据的表?
注释:CSV文件与此类似:
surfaces.csv
:
u,s
41,1
42,1.5
43,1.2
words.csv
:
word,frequency
abc,10
spectrum.csv
:
word,unicode,spectrum
abc,1,41
abc,2,42
abc,3,43
答案 0 :(得分:0)
我用AMPL(一种数学编程语言,它是GNU MathProg的超集)找到了答案。我需要使用words
和unicodes
之间的链接定义一个集合,并在读取表时将该集合用作控件集:
set links within {words, unicodes};
param spectrum{links} >= 0;
table data IN "CSV" "spectrum.csv": links <- [word, unicode], spectrum~spectrum;
现在我得到了:
...
INTEGER OPTIMAL SOLUTION FOUND
Time used: 0.0 secs
Memory used: 0.1 Mb (156430 bytes)
文档中的“可选集”仍然令人误解,我提交了一个错误报告。作为参考,AMPL的书为free to download,我使用的运输模型分别分散在3.2节的47页,10.1节的173页和10.2节的179页。