Documentation: http://amplpy.readthedocs.io
GitHub Repository: https://github.com/ampl/amplpy
PyPI Repository: https://pypi.python.org/pypi/amplpy
In [1]:
from __future__ import print_function
from amplpy import AMPL
from math import floor
import os
In [2]:
with open(os.path.join('models', 'cutRev1.mod'), 'r') as f:
print(f.read())
In [3]:
with open(os.path.join('models', 'cutRev1.dat'), 'r') as f:
print(f.read())
In [4]:
# Initialize
ampl = AMPL()
ampl.option['solver'] = 'gurobi'
ampl.read(os.path.join('models', 'cutRev1.mod'))
ampl.readData(os.path.join('models', 'cutRev1.dat'))
In [5]:
ampl.eval('objective Number; solve;')
ampl.display('Number', 'Waste')
In [6]:
ampl.eval('objective Waste; solve;')
ampl.display('Number', 'Waste')
In [7]:
with open(os.path.join('models', 'cutRev2.mod'), 'r') as f:
print(f.read())
In [8]:
with open(os.path.join('models', 'cutRev2.dat'), 'r') as f:
print(f.read())
In [14]:
# Initialize
ampl = AMPL()
ampl.option['solver'] = 'gurobi'
ampl.read(os.path.join('models', 'cutRev2.mod'))
ampl.readData(os.path.join('models', 'cutRev2.dat'))
ampl.eval('objective Number; solve;')
min_number = ampl.getValue('Number')
min_numwaste = ampl.getValue('Waste')
ampl.eval('objective Waste;')
In [15]:
over_lim = int(ampl.param['over_lim'].value())
prev_number = float('inf')
min_waste = {}
min_wastenum = {}
for k in reversed(range(over_lim)):
ampl.param['over_lim'] = k
ampl.eval('solve;')
if ampl.getValue('solve_result') == 'infeasible':
break
number = ampl.getValue('Number')
if number < prev_number:
min_waste[k] = ampl.getValue('Waste')
min_wastenum[k] = number
prev_number = number
if number == min_number:
break
In [12]:
print('Min{:3.0f} rolls with waste{:6.2f}\n'.format(min_number, min_numwaste))
print('Over\tWaste\tNumber')
for k in sorted(min_waste.keys(), reverse=True):
print('{}\t{}\t{:.0f}'.format(k, min_waste[k], min_wastenum[k]))