7from gams
import GamsWorkspace
11<category>:category:</category>
12<solver>:solver:</solver>
13<inputType>GAMS</inputType>
15<priority>short</priority>
16<model><![CDATA[:model:]]></model>
17<wantgdx><![CDATA[yes]]></wantgdx>
18<wantlog><![CDATA[yes]]></wantlog>
19<wantlst><![CDATA[yes]]></wantlst>
22if __name__ ==
"__main__":
23 sys_dir = sys.argv[1]
if len(sys.argv) > 1
else None
24 work_dir = sys.argv[2]
if len(sys.argv) > 2
else None
25 ws = GamsWorkspace(system_directory=sys_dir, working_directory=work_dir)
30 ssl_context = ssl.create_default_context(cafile=certifi.where())
32 neos = xmlrpc.client.ServerProxy(
33 "https://neos-server.org:3333", context=ssl_context
35 if "NeosServer is alive" not in neos.ping():
36 raise Exception(
"Could not make connection to NEOS server")
39 xml = xml.replace(
":category:",
"MILP")
40 xml = xml.replace(
":solver:",
"CBC")
41 if "NEOS_EMAIL" in os.environ:
42 xml = xml.replace(
":email:", os.environ[
"NEOS_EMAIL"])
44 raise Exception(
"Environment variable 'NEOS_EMAIL' not found")
45 with open(os.path.join(ws.working_directory, model +
".gms"),
"r")
as f:
46 xml = xml.replace(
":model:", f.read())
48 job_number, password = neos.submitJob(xml)
49 print(f
"Job number: {job_number}")
50 print(f
"Job password: {password}")
53 raise Exception(f
"NEOS server error: {password}")
58 while status !=
"Done":
60 result, offset = neos.getIntermediateResults(job_number, password, offset)
61 result = result.data.decode()
63 if "Composing results." in result:
64 result = result.split(
"Composing results.", 1)[0]
67 status = neos.getJobStatus(job_number, password)
69 result = neos.getFinalResults(job_number, password)
71 f
"{job_number}-{os.path.splitext(os.path.basename(model + '.gms'))[0]}.lst",
"w"
73 f.write(result.data.decode())
74 result = neos.getOutputFile(job_number, password,
"solver-output.zip")
75 with open(f
"{job_number}-solver-output.zip",
"wb")
as f: