SciTE AMPL配置问题
最近研究下整数规划问题,采用AMPL进行建模,研究过程中,发现有很多学者推荐使用SciTE进行编辑并运行。 如:
http://blog.csdn.net/mathsoperator/article/details/4699328;
http://archive.ite.journal.informs.org/Vol7No1/LeeRaffensperger/scite/amplhelp.html。
但都没有给出具体的配置方法,经过两天的研究,环境终于配置成功。
下面介绍一下我的配置步骤:
(1)AMPL下载:http://www.ampl.com/NEW/TABLES/amplcml.zip,
SciTE下载:http://jltt.onlinedown.net/down/ha-scite221.rar
配置好环境变量以后,按http://blog.csdn.net/mathsoperator/article/details/4699328里运行test1.mod:
set vec:=1..4;
param x{vec};
data;
param x:=1 1
2 5
3 6
4 8;
display x;
display sum {i in vec} x[i];
param x{vec};
data;
param x:=1 1
2 5
3 6
4 8;
display x;
display sum {i in vec} x[i];
你会发现选项里运行为灰色,因此此时还没有将AMPL的解析器加载到SciTE中去。参考google的论坛,下面给出步骤。
(2)从http://archive.ite.journal.informs.org/Vol7No1/LeeRaffensperger/scite/ampl.properties下载ampl.properties文件,放在SciTE的根目录下:如“E:\……\wSciTE”。
(3)修改SciTE的全局设置文件“SciTEGlobal.properties”,在文件最后加“import ampl”。
(4)此时mod能够运行,但发生错误:“>ampl test1.mod>系统找不到指定的文件。”原因是得在“ampl.properties"文件中配置ampl的路径,找到:
”command.go.$(file.patterns.ampl)=ampl $(FileName).$(FileExt)“
将其修改为:“command.go.$(file.patterns.ampl)="E:\……\ampl" $(FileName).$(FileExt)”(你ampl所在的路径)保存。
此时再运行test1.mod,已经成功!
文件road.mod
set INTER;
param entr symbolic in INTER;
param exit symbolic in INTER, <> entr ;
set ROADS within (INTER diff {exit}) cross (INTER diff {entr});
param cap {ROADS} >= 0;
var Traff {( i,j) in ROADS} >= 0, <= cap[i,j];
param distance {ROADS} >= 0;
var use {(i,j) in ROADS} >= 0;
minimize Total_distance: sum {(i,j) in ROADS} distance[i,j] * use[i,j];
subject to Start: sum{(entr,j) in ROADS} use[entr,j]=1;
subject to Balance {k in INTER diff {entr,exit}}:
sum {(i,k) in ROADS} use[i,k] = sum {(k,j) in ROADS} use[k,j];
文件road.dat
set INTER := a b c d e f g ;
param entr := a;
param exit := g;
param: ROADS: distance :=
a d 50, a c 100
b d 40, b e 20
c d 60, c f 20
d e 50, d f 60
e g 70, f g 70;
文件road.run
model road.mod;
data road.dat;
solve;
display use;
运行road.run,发生”Cannot invoke minos: no such program.“错误。
原因是solve需要查找求解器,但不知道为什么此时找不到minos.exe,但是在单独运行ampl.exe,问题是可以求解的。
(5)查阅了一晚上资料,终于在google论坛中找到解决方法,最简单的方法是修改road.run:
model road.mod;
data road.dat;
option solver 'E:/amplcml/minos';
solve;
display use;
通过”option solver 'E:/amplcml/minos'“设置解析器的地址,再运行road.run,成功!
MINOS 5.5: optimal solution found.
2 iterations, objective 170
use :=
a c 0
a d 1
b d 0
b e 0
c d 0
c f 0
d e 1
d f 0
e g 1
f g 0
;