Ошибка BadStatusLine при запуске AMPL на сервере NEOS
Я пытался запустить код AMPL на сервере NEOS с локального компьютера через Kestrel, как описано на веб-сайте AMPL: запустить amp на neos. Я использовал простой файл модели со следующими параметрами:
option solver "/home/arthur/amplide.linux64/kestrel";
option kestrel_options 'solver=loqo';
option loqo_options 'minlocfil sigfig=8 outlev=2';
option neos_server 'www.neos-server.org:3333';
Последняя строка из учебника на веб-сайте NEOS: https://neos-server.org/neos/kestrel.html
Я получаю следующую ошибку, и никакая работа не помещается в очередь:
File "/home/arthur/amplide.linux64/kestrel", line 217, in <module>
kestrel = kestrelAMPL()
File "/home/arthur/amplide.linux64/kestrel", line 19, in __init__
result = self.neos.ping()
...
File "/usr/lib/python2.7/httplib.py", line 408, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine: ''
exit code 1
<BREAK>
Если я делаю это в AMPL IDE вместо терминала, он просто зависает.
1 ответ
Поэтому я нашел простое решение для этого.
Если вы редактируете kestrel
файл в вашем каталоге AMPL (файл, который поставляется из архива Kestrel) в любом текстовом редакторе, вы можете заменить строку
self.neos = xmlrpclib.ServerProxy("http://%s:%s" % (self.host,self.port))
с
self.neos = xmlrpclib.ServerProxy("https://%s:%s" % (self.host,self.port) )
После этого моя работа прошла успешно. Похоже, что NEOS устарела http-звонки в июле 2016 года.
В качестве альтернативы (я не пробовал это), вместо того, чтобы использовать версию kestrel с веб-сайтов AMPL или NEOS, вы можете, возможно, попробовать модифицированный пакет отсюда: https://github.com/Pyomo/pyomo/blob/master/pyomo/neos/kestrel.py