# ____________________________________________________________________________________
#
# Pyomo: Python Optimization Modeling Objects
# Copyright (c) 2008-2026 National Technology and Engineering Solutions of Sandia, LLC
# Under the terms of Contract DE-NA0003525 with National Technology and Engineering
# Solutions of Sandia, LLC, the U.S. Government retains certain rights in this
# software. This software is distributed under the 3-clause BSD License.
# ____________________________________________________________________________________
"""
Utilities to support the definition of optimization applications that
can be optimized with the Acro COLIN optimizers.
"""
import os
from pyomo.opt.base import ProblemFormat, convert_problem, guess_format
[docs]
class AmplModel:
"""
A class that provides a wrapper for AMPL models.
"""
[docs]
def __init__(self, modfile, datfile=None):
"""
The constructor.
"""
self.modfile = modfile
self.datfile = datfile
[docs]
def valid_problem_types(self):
"""This method allows the pyomo.opt convert function to work with an AmplModel object."""
return [ProblemFormat.mod]
def _problem_files(self):
if self.datfile is None:
return [self.modfile]
else:
return [self.modfile, self.datfile]
[docs]
def write(self, filename, format=None, solver_capability=None):
"""
Write the model to a file, with a given format.
NOTE: this is the same exact code as is used in PyomoModel.py
"""
if format is None and not filename is None:
#
# Guess the format if none is specified
#
format = guess_format(filename)
if solver_capability is None:
solver_capability = lambda x: True
#
if self.datfile is None:
args = (self.modfile,)
else:
args = (self.modfile, self.datfile)
res = convert_problem(args, format, [format], solver_capability)
if filename is not None and res[0][0] != filename:
if os.path.exists(filename):
os.remove(filename)
os.rename(res[0][0], filename)