From 14f8daeeaf69584f25576075817b7691835e56ec Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 14:16:02 -0600 Subject: [PATCH 1/8] Renaming main development branch (master -> main) --- .github/workflows/{push_branch_test.yml => test_branches.yml} | 2 +- .github/workflows/{pr_master_test.yml => test_pr_main.yml} | 4 ++-- README.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename .github/workflows/{push_branch_test.yml => test_branches.yml} (99%) rename .github/workflows/{pr_master_test.yml => test_pr_main.yml} (99%) diff --git a/.github/workflows/push_branch_test.yml b/.github/workflows/test_branches.yml similarity index 99% rename from .github/workflows/push_branch_test.yml rename to .github/workflows/test_branches.yml index 84f9211..d3d4bb3 100644 --- a/.github/workflows/push_branch_test.yml +++ b/.github/workflows/test_branches.yml @@ -3,7 +3,7 @@ name: GitHub Branch CI on: push: branches-ignore: - - master + - main workflow_dispatch: inputs: git-ref: diff --git a/.github/workflows/pr_master_test.yml b/.github/workflows/test_pr_main.yml similarity index 99% rename from .github/workflows/pr_master_test.yml rename to .github/workflows/test_pr_main.yml index 995f7c7..69ec1a6 100644 --- a/.github/workflows/pr_master_test.yml +++ b/.github/workflows/test_pr_main.yml @@ -3,10 +3,10 @@ name: GitHub CI on: push: branches: - - master + - main pull_request: branches: - - master + - main workflow_dispatch: inputs: git-ref: diff --git a/README.md b/README.md index 632dc4b..b1463e3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![Github Actions Status](https://github.com/Pyomo/pysp/workflows/GitHub%20CI/badge.svg?event=push)](https://github.com/Pyomo/pysp/actions?query=event%3Apush+workflow%3A%22GitHub+CI%22) [![Jenkins Status](https://img.shields.io/jenkins/s/https/software.sandia.gov/downloads/pub/pyomo/jenkins/PySP_trunk.svg?logo=jenkins&logoColor=white)](https://jenkins-srn.sandia.gov/job/Pyomo_pysp_trunk) -[![codecov](https://codecov.io/gh/Pyomo/pysp/branch/master/graph/badge.svg)](https://codecov.io/gh/Pyomo/pysp) +[![codecov](https://codecov.io/gh/Pyomo/pysp/branch/main/graph/badge.svg)](https://codecov.io/gh/Pyomo/pysp) [![GitHub contributors](https://img.shields.io/github/contributors/pyomo/pysp.svg)](https://github.com/pyomo/pysp/graphs/contributors) [![Merged PRs](https://img.shields.io/github/issues-pr-closed-raw/pyomo/pysp.svg?label=merged+PRs)](https://github.com/pyomo/pysp/pulls?q=is:pr+is:merged) From 531c5e99bbdfd66a140bbb9de0917ecc3a0b5883 Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 14:50:06 -0600 Subject: [PATCH 2/8] Tracking changes in Pyomo 6.0 --- pysp/scenariotree/__init__.py | 3 ++- pysp/scenariotree/instance_factory.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pysp/scenariotree/__init__.py b/pysp/scenariotree/__init__.py index 7e36c82..a78c1f7 100644 --- a/pysp/scenariotree/__init__.py +++ b/pysp/scenariotree/__init__.py @@ -19,6 +19,8 @@ ComponentUID) from pyomo.core.base.sos import _SOSConstraintData from pyomo.repn import generate_standard_repn +from pyomo.scripting.interface import IPyomoScriptModifyInstance + from pysp.phutils import (BasicSymbolMap, indexToString, isVariableNameIndexed, @@ -32,7 +34,6 @@ ScenarioTreeBundle, ScenarioTree) from pysp.scenariotree.instance_factory import (DataPortal, Block, - IPyomoScriptModifyInstance, AbstractModel, _BlockData, ExtensionPoint, load_external_module, diff --git a/pysp/scenariotree/instance_factory.py b/pysp/scenariotree/instance_factory.py index 9d07ea3..d81df32 100644 --- a/pysp/scenariotree/instance_factory.py +++ b/pysp/scenariotree/instance_factory.py @@ -22,12 +22,12 @@ from pyomo.dataportal import DataPortal from pyomo.core import (Block, - IPyomoScriptModifyInstance, AbstractModel) from pyomo.core.base.block import _BlockData from pyomo.common.dependencies import yaml, yaml_available, yaml_load_args from pyomo.common.gc_manager import PauseGC from pyomo.common.plugin import ExtensionPoint +from pyomo.scripting.interface import IPyomoScriptModifyInstance from pysp.util.misc import load_external_module from pysp.scenariotree.tree_structure_model import \ (CreateAbstractScenarioTreeModel, From 0b8b8d0912ebf3a476a1a3d4a18e00d2e43d005b Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 14:50:39 -0600 Subject: [PATCH 3/8] Updating minimum Python version [forced on pysp by Pyomo 6.0] --- setup.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 489b8d3..297bbd7 100644 --- a/setup.py +++ b/setup.py @@ -62,11 +62,7 @@ def run_setup(): 'Operating System :: Microsoft :: Windows', 'Operating System :: Unix', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', @@ -75,11 +71,10 @@ def run_setup(): 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Scientific/Engineering :: Mathematics', 'Topic :: Software Development :: Libraries :: Python Modules' ], - python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*', + python_requires='>=3.6', install_requires=[ - 'Pyomo>=6.0.0.dev0', - 'PyUtilib>=6.0.1.dev0', - 'enum34;python_version<"3.4"', + 'Pyomo>=6.0', + 'PyUtilib>=6.0.0', 'ply', 'six>=1.4', ], From 2972e4094c5badc393fedce3ba3d55788ea42c46 Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 15:07:06 -0600 Subject: [PATCH 4/8] Additional updates tracking Pyomo 6.0 --- pysp/tests/unit/test_scenariotree.py | 58 ++++++++++++++-------------- pysp/util/rapper.py | 4 +- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/pysp/tests/unit/test_scenariotree.py b/pysp/tests/unit/test_scenariotree.py index 5947980..75c0d81 100644 --- a/pysp/tests/unit/test_scenariotree.py +++ b/pysp/tests/unit/test_scenariotree.py @@ -485,9 +485,9 @@ def test_two_stage(self): self.assertEqual( sorted(list(model.Scenarios)), sorted(["Child1", "Child2"])) - self.assertEqual(model.ConditionalProbability["Root"], 1.0) - self.assertEqual(model.ConditionalProbability["Child1"], 0.8) - self.assertEqual(model.ConditionalProbability["Child2"], 0.2) + self.assertEqual(value(model.ConditionalProbability["Root"]), 1.0) + self.assertEqual(value(model.ConditionalProbability["Child1"]), 0.8) + self.assertEqual(value(model.ConditionalProbability["Child2"]), 0.2) model.StageCost["Stage1"] = "c1" model.StageCost["Stage2"] = "c2" model.StageVariables["Stage1"].add("x") @@ -531,9 +531,9 @@ def test_two_stage_more_node_attributes(self): self.assertEqual( sorted(list(model.Scenarios)), sorted(["Child1", "Child2"])) - self.assertEqual(model.ConditionalProbability["Root"], 1.0) - self.assertEqual(model.ConditionalProbability["Child1"], 0.8) - self.assertEqual(model.ConditionalProbability["Child2"], 0.2) + self.assertEqual(value(model.ConditionalProbability["Root"]), 1.0) + self.assertEqual(value(model.ConditionalProbability["Child1"]), 0.8) + self.assertEqual(value(model.ConditionalProbability["Child2"]), 0.2) self.assertEqual(model.StageCost["Stage1"].value, None) self.assertEqual(list(model.StageVariables["Stage1"]), []) @@ -590,9 +590,9 @@ def test_two_stage_custom_names(self): self.assertEqual( sorted(list(model.Scenarios)), sorted(["S1", "S2"])) - self.assertEqual(model.ConditionalProbability["Root"], 1.0) - self.assertEqual(model.ConditionalProbability["Child1"], 0.8) - self.assertEqual(model.ConditionalProbability["Child2"], 0.2) + self.assertEqual(value(model.ConditionalProbability["Root"]), 1.0) + self.assertEqual(value(model.ConditionalProbability["Child1"]), 0.8) + self.assertEqual(value(model.ConditionalProbability["Child2"]), 0.2) model.StageCost["T1"] = "c1" model.StageCost["T2"] = "c2" model.StageVariables["T1"].add("x") @@ -654,19 +654,19 @@ def test_multi_stage(self): self.assertEqual( sorted(list(model.Scenarios)), sorted([4, 5, 6, 7, 8, 9, 10, 11, 12])) - self.assertEqual(model.ConditionalProbability[0], 1.0) - self.assertAlmostEqual(model.ConditionalProbability[1], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[2], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[3], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[4], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[5], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[6], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[7], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[8], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[9], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[10], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[11], 1.0/3) - self.assertAlmostEqual(model.ConditionalProbability[12], 1.0/3) + self.assertEqual(value(model.ConditionalProbability[0]), 1.0) + self.assertAlmostEqual(value(model.ConditionalProbability[1]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[2]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[3]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[4]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[5]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[6]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[7]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[8]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[9]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[10]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[11]), 1.0/3) + self.assertAlmostEqual(value(model.ConditionalProbability[12]), 1.0/3) model.StageCost["Stage1"] = "c1" model.StageCost["Stage2"] = "c2" model.StageCost["Stage3"] = "c3" @@ -716,11 +716,11 @@ def test_unbalanced(self): self.assertEqual( sorted(list(model.Scenarios)), sorted(["00", "01", "1"])) - self.assertEqual(model.ConditionalProbability["R"], 1.0) - self.assertEqual(model.ConditionalProbability["0"], 0.5) - self.assertEqual(model.ConditionalProbability["1"], 0.5) - self.assertEqual(model.ConditionalProbability["00"], 0.5) - self.assertEqual(model.ConditionalProbability["01"], 0.5) + self.assertEqual(value(model.ConditionalProbability["R"]), 1.0) + self.assertEqual(value(model.ConditionalProbability["0"]), 0.5) + self.assertEqual(value(model.ConditionalProbability["1"]), 0.5) + self.assertEqual(value(model.ConditionalProbability["00"]), 0.5) + self.assertEqual(value(model.ConditionalProbability["01"]), 0.5) model.StageCost["Stage1"] = "c1" model.StageCost["Stage2"] = "c2" model.StageCost["Stage3"] = "c3" @@ -756,9 +756,9 @@ def test_bundles(self): self.assertEqual( sorted(list(model.Scenarios)), sorted(["u0", "u1", "u2", "u3"])) - self.assertEqual(model.ConditionalProbability["r"], 1.0) + self.assertEqual(value(model.ConditionalProbability["r"]), 1.0) for i in range(4): - self.assertEqual(model.ConditionalProbability["u"+str(i)], + self.assertEqual(value(model.ConditionalProbability["u"+str(i)]), 0.25) self.assertEqual(model.Bundling.value, True) self.assertEqual(list(model.Bundles), [0, 1]) diff --git a/pysp/util/rapper.py b/pysp/util/rapper.py index a69ea30..effc6ca 100644 --- a/pysp/util/rapper.py +++ b/pysp/util/rapper.py @@ -6,7 +6,7 @@ """ import inspect -from pyomo.core.base.component import _name_index_generator +from pyomo.core.base.component_namer import index_repr from pyomo.environ import SolverFactory from pysp.scenariotree.instance_factory \ import ScenarioTreeInstanceFactory @@ -308,7 +308,7 @@ def root_Var_solution(self): var_name, index = root_node._variable_ids[variable_id] name = var_name if index is not None: - name += _name_index_generator(index) + name += index_repr(index) yield name, root_node._solution[variable_id] #========================= From e18061c35b4a4fd17312338fb5564ae99918b2a6 Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 16:16:51 -0600 Subject: [PATCH 5/8] Adding missing import --- pysp/tests/unit/test_scenariotree.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pysp/tests/unit/test_scenariotree.py b/pysp/tests/unit/test_scenariotree.py index 75c0d81..c838231 100644 --- a/pysp/tests/unit/test_scenariotree.py +++ b/pysp/tests/unit/test_scenariotree.py @@ -18,7 +18,8 @@ Var, Expression, Objective, - Block) + Block, + value) from pyomo.common.dependencies import ( networkx, networkx_available as has_networkx ) From 65fec1c615396263ff952166acbc478c9221c447 Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 16:19:26 -0600 Subject: [PATCH 6/8] track rename of Simple -> Scalar components --- pysp/tests/convert/test_ddsip.py | 2 +- pysp/tests/convert/test_smps.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysp/tests/convert/test_ddsip.py b/pysp/tests/convert/test_ddsip.py index 2b9e353..2f37f91 100644 --- a/pysp/tests/convert/test_ddsip.py +++ b/pysp/tests/convert/test_ddsip.py @@ -145,7 +145,7 @@ def test_bad_component_type(self): b"TypeError: Declarations " b"in annotation type StochasticConstraintBodyAnnotation " b"must be of types Constraint or Block. Invalid type: " - b"") + b"") shutil.rmtree(output_dir, ignore_errors=True) os.remove(outfile) diff --git a/pysp/tests/convert/test_smps.py b/pysp/tests/convert/test_smps.py index a890e5f..91c1252 100644 --- a/pysp/tests/convert/test_smps.py +++ b/pysp/tests/convert/test_smps.py @@ -177,7 +177,7 @@ def test_bad_component_type(self): b"TypeError: Declarations " b"in annotation type StochasticConstraintBodyAnnotation " b"must be of types Constraint or Block. Invalid type: " - b"") + b"") shutil.rmtree(output_dir, ignore_errors=True) os.remove(outfile) From 4af050edfb969d8cfdfed7855d896f22e55befef Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 16:31:34 -0600 Subject: [PATCH 7/8] Updating LP baselines to track changes in Pyomo string labeler --- .../unit/baselines/farmer_ef.baseline.lp | 24 +-- .../unit/baselines/farmer_ef_cvar.baseline.lp | 24 +-- .../baselines/farmer_maximize_ef.baseline.lp | 24 +-- .../baselines/farmer_piecewise_ef.baseline.lp | 24 +-- .../tests/unit/baselines/hydro_ef.baseline.lp | 176 +++++++++--------- .../unit/baselines/sizes3_ef.baseline.lp.gz | Bin 10586 -> 10613 bytes 6 files changed, 136 insertions(+), 136 deletions(-) diff --git a/pysp/tests/unit/baselines/farmer_ef.baseline.lp b/pysp/tests/unit/baselines/farmer_ef.baseline.lp index 0ac0036..1e14e59 100644 --- a/pysp/tests/unit/baselines/farmer_ef.baseline.lp +++ b/pysp/tests/unit/baselines/farmer_ef.baseline.lp @@ -37,47 +37,47 @@ s.t. c_e_MASTER_BLEND_CONSTRAINT_RootNode(1)_: -1 BelowAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(2)_: -1 AverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(3)_: -1 AboveAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(4)_: -1 BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(5)_: -1 AverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(6)_: -1 AboveAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(7)_: -1 BelowAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(8)_: -1 AverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(9)_: -1 AboveAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_u_BelowAverageScenario_ConstrainTotalAcreage_: @@ -291,9 +291,9 @@ c_e_ONE_VAR_CONSTANT: ONE_VAR_CONSTANT = 1.0 bounds - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) <= +inf 0 <= BelowAverageScenario_DevotedAcreage(CORN) <= 500 0 <= BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) <= 500 0 <= BelowAverageScenario_DevotedAcreage(WHEAT) <= 500 diff --git a/pysp/tests/unit/baselines/farmer_ef_cvar.baseline.lp b/pysp/tests/unit/baselines/farmer_ef_cvar.baseline.lp index 06c3a0c..6fa8799 100644 --- a/pysp/tests/unit/baselines/farmer_ef_cvar.baseline.lp +++ b/pysp/tests/unit/baselines/farmer_ef_cvar.baseline.lp @@ -57,47 +57,47 @@ c_l_COMPUTE_SCENARIO_EXCESS(3)_: c_e_MASTER_BLEND_CONSTRAINT_RootNode(1)_: -1 BelowAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(2)_: -1 AverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(3)_: -1 AboveAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(4)_: -1 BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(5)_: -1 AverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(6)_: -1 AboveAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(7)_: -1 BelowAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(8)_: -1 AverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(9)_: -1 AboveAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_u_BelowAverageScenario_ConstrainTotalAcreage_: @@ -315,9 +315,9 @@ bounds 0 <= CVAR_EXCESS_BelowAverageScenario <= +inf 0 <= CVAR_EXCESS_AverageScenario <= +inf 0 <= CVAR_EXCESS_AboveAverageScenario <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) <= +inf 0 <= BelowAverageScenario_DevotedAcreage(CORN) <= 500 0 <= BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) <= 500 0 <= BelowAverageScenario_DevotedAcreage(WHEAT) <= 500 diff --git a/pysp/tests/unit/baselines/farmer_maximize_ef.baseline.lp b/pysp/tests/unit/baselines/farmer_maximize_ef.baseline.lp index a4e528c..f25ae8f 100644 --- a/pysp/tests/unit/baselines/farmer_maximize_ef.baseline.lp +++ b/pysp/tests/unit/baselines/farmer_maximize_ef.baseline.lp @@ -13,47 +13,47 @@ s.t. c_e_MASTER_BLEND_CONSTRAINT_RootNode(1)_: -1 BelowAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(2)_: -1 AverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(3)_: -1 AboveAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(4)_: -1 BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(5)_: -1 AverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(6)_: -1 AboveAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(7)_: -1 BelowAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(8)_: -1 AverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(9)_: -1 AboveAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_u_BelowAverageScenario_ConstrainTotalAcreage_: @@ -321,9 +321,9 @@ c_e_ONE_VAR_CONSTANT: ONE_VAR_CONSTANT = 1.0 bounds - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) <= +inf 0 <= BelowAverageScenario_DevotedAcreage(CORN) <= 500 0 <= BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) <= 500 0 <= BelowAverageScenario_DevotedAcreage(WHEAT) <= 500 diff --git a/pysp/tests/unit/baselines/farmer_piecewise_ef.baseline.lp b/pysp/tests/unit/baselines/farmer_piecewise_ef.baseline.lp index 98b82e4..2945aeb 100644 --- a/pysp/tests/unit/baselines/farmer_piecewise_ef.baseline.lp +++ b/pysp/tests/unit/baselines/farmer_piecewise_ef.baseline.lp @@ -13,47 +13,47 @@ s.t. c_e_MASTER_BLEND_CONSTRAINT_RootNode(1)_: -1 BelowAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(2)_: -1 AverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(3)_: -1 AboveAverageScenario_DevotedAcreage(CORN) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(4)_: -1 BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(5)_: -1 AverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(6)_: -1 AboveAverageScenario_DevotedAcreage(SUGAR_BEETS) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(7)_: -1 BelowAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(8)_: -1 AverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(9)_: -1 AboveAverageScenario_DevotedAcreage(WHEAT) -+1 MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) ++1 MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) = 0 c_u_BelowAverageScenario_ConstrainTotalAcreage_: @@ -390,9 +390,9 @@ c_e_ONE_VAR_CONSTANT: ONE_VAR_CONSTANT = 1.0 bounds - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__CORN) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__SUGAR_BEETS) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(DevotedAcreage__WHEAT) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__CORN_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__SUGAR_BEETS_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_DevotedAcreage__WHEAT_) <= +inf 0 <= BelowAverageScenario_DevotedAcreage(CORN) <= 500 0 <= BelowAverageScenario_DevotedAcreage(SUGAR_BEETS) <= 500 0 <= BelowAverageScenario_DevotedAcreage(WHEAT) <= 500 diff --git a/pysp/tests/unit/baselines/hydro_ef.baseline.lp b/pysp/tests/unit/baselines/hydro_ef.baseline.lp index 8340526..ebd0fab 100644 --- a/pysp/tests/unit/baselines/hydro_ef.baseline.lp +++ b/pysp/tests/unit/baselines/hydro_ef.baseline.lp @@ -33,362 +33,362 @@ MASTER: s.t. c_e_MASTER_BLEND_CONSTRAINT_RootNode(1)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen1_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(2)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen2_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(3)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen3_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(4)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen4_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(5)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen5_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(6)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen6_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(7)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen7_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(8)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen8_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(9)_: -+1 MASTER_BLEND_VAR_RootNode(PDns__1) ++1 MASTER_BLEND_VAR_RootNode(_PDns__1_) -1 Scen9_PDns(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(10)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen1_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(11)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen2_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(12)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen3_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(13)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen4_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(14)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen5_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(15)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen6_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(16)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen7_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(17)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen8_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(18)_: -+1 MASTER_BLEND_VAR_RootNode(Pgh__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgh__1_) -1 Scen9_Pgh(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(19)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen1_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(20)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen2_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(21)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen3_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(22)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen4_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(23)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen5_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(24)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen6_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(25)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen7_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(26)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen8_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(27)_: -+1 MASTER_BLEND_VAR_RootNode(Pgt__1) ++1 MASTER_BLEND_VAR_RootNode(_Pgt__1_) -1 Scen9_Pgt(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(28)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen1_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(29)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen2_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(30)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen3_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(31)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen4_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(32)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen5_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(33)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen6_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(34)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen7_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(35)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen8_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_RootNode(36)_: -+1 MASTER_BLEND_VAR_RootNode(Vol__1) ++1 MASTER_BLEND_VAR_RootNode(_Vol__1_) -1 Scen9_Vol(1) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(1)_: -+1 MASTER_BLEND_VAR_Node2_1(PDns__2) ++1 MASTER_BLEND_VAR_Node2_1(_PDns__2_) -1 Scen1_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(2)_: -+1 MASTER_BLEND_VAR_Node2_1(PDns__2) ++1 MASTER_BLEND_VAR_Node2_1(_PDns__2_) -1 Scen2_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(3)_: -+1 MASTER_BLEND_VAR_Node2_1(PDns__2) ++1 MASTER_BLEND_VAR_Node2_1(_PDns__2_) -1 Scen3_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(4)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgh__2_) -1 Scen1_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(5)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgh__2_) -1 Scen2_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(6)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgh__2_) -1 Scen3_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(7)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgt__2_) -1 Scen1_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(8)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgt__2_) -1 Scen2_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(9)_: -+1 MASTER_BLEND_VAR_Node2_1(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_1(_Pgt__2_) -1 Scen3_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(10)_: -+1 MASTER_BLEND_VAR_Node2_1(Vol__2) ++1 MASTER_BLEND_VAR_Node2_1(_Vol__2_) -1 Scen1_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(11)_: -+1 MASTER_BLEND_VAR_Node2_1(Vol__2) ++1 MASTER_BLEND_VAR_Node2_1(_Vol__2_) -1 Scen2_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_1(12)_: -+1 MASTER_BLEND_VAR_Node2_1(Vol__2) ++1 MASTER_BLEND_VAR_Node2_1(_Vol__2_) -1 Scen3_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(1)_: -+1 MASTER_BLEND_VAR_Node2_2(PDns__2) ++1 MASTER_BLEND_VAR_Node2_2(_PDns__2_) -1 Scen4_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(2)_: -+1 MASTER_BLEND_VAR_Node2_2(PDns__2) ++1 MASTER_BLEND_VAR_Node2_2(_PDns__2_) -1 Scen5_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(3)_: -+1 MASTER_BLEND_VAR_Node2_2(PDns__2) ++1 MASTER_BLEND_VAR_Node2_2(_PDns__2_) -1 Scen6_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(4)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgh__2_) -1 Scen4_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(5)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgh__2_) -1 Scen5_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(6)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgh__2_) -1 Scen6_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(7)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgt__2_) -1 Scen4_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(8)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgt__2_) -1 Scen5_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(9)_: -+1 MASTER_BLEND_VAR_Node2_2(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_2(_Pgt__2_) -1 Scen6_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(10)_: -+1 MASTER_BLEND_VAR_Node2_2(Vol__2) ++1 MASTER_BLEND_VAR_Node2_2(_Vol__2_) -1 Scen4_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(11)_: -+1 MASTER_BLEND_VAR_Node2_2(Vol__2) ++1 MASTER_BLEND_VAR_Node2_2(_Vol__2_) -1 Scen5_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_2(12)_: -+1 MASTER_BLEND_VAR_Node2_2(Vol__2) ++1 MASTER_BLEND_VAR_Node2_2(_Vol__2_) -1 Scen6_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(1)_: -+1 MASTER_BLEND_VAR_Node2_3(PDns__2) ++1 MASTER_BLEND_VAR_Node2_3(_PDns__2_) -1 Scen7_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(2)_: -+1 MASTER_BLEND_VAR_Node2_3(PDns__2) ++1 MASTER_BLEND_VAR_Node2_3(_PDns__2_) -1 Scen8_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(3)_: -+1 MASTER_BLEND_VAR_Node2_3(PDns__2) ++1 MASTER_BLEND_VAR_Node2_3(_PDns__2_) -1 Scen9_PDns(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(4)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgh__2_) -1 Scen7_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(5)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgh__2_) -1 Scen8_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(6)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgh__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgh__2_) -1 Scen9_Pgh(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(7)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgt__2_) -1 Scen7_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(8)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgt__2_) -1 Scen8_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(9)_: -+1 MASTER_BLEND_VAR_Node2_3(Pgt__2) ++1 MASTER_BLEND_VAR_Node2_3(_Pgt__2_) -1 Scen9_Pgt(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(10)_: -+1 MASTER_BLEND_VAR_Node2_3(Vol__2) ++1 MASTER_BLEND_VAR_Node2_3(_Vol__2_) -1 Scen7_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(11)_: -+1 MASTER_BLEND_VAR_Node2_3(Vol__2) ++1 MASTER_BLEND_VAR_Node2_3(_Vol__2_) -1 Scen8_Vol(2) = 0 c_e_MASTER_BLEND_CONSTRAINT_Node2_3(12)_: -+1 MASTER_BLEND_VAR_Node2_3(Vol__2) ++1 MASTER_BLEND_VAR_Node2_3(_Vol__2_) -1 Scen9_Vol(2) = 0 @@ -927,22 +927,22 @@ c_e_ONE_VAR_CONSTANT: ONE_VAR_CONSTANT = 1.0 bounds - -inf <= MASTER_BLEND_VAR_RootNode(PDns__1) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(Pgh__1) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(Pgt__1) <= +inf - -inf <= MASTER_BLEND_VAR_RootNode(Vol__1) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_1(PDns__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_1(Pgh__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_1(Pgt__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_1(Vol__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_2(PDns__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_2(Pgh__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_2(Pgt__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_2(Vol__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_3(PDns__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_3(Pgh__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_3(Pgt__2) <= +inf - -inf <= MASTER_BLEND_VAR_Node2_3(Vol__2) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_PDns__1_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_Pgh__1_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_Pgt__1_) <= +inf + -inf <= MASTER_BLEND_VAR_RootNode(_Vol__1_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_1(_PDns__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_1(_Pgh__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_1(_Pgt__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_1(_Vol__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_2(_PDns__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_2(_Pgh__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_2(_Pgt__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_2(_Vol__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_3(_PDns__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_3(_Pgh__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_3(_Pgt__2_) <= +inf + -inf <= MASTER_BLEND_VAR_Node2_3(_Vol__2_) <= +inf 0 <= Scen1_Pgt(1) <= 100 0 <= Scen1_Pgt(2) <= 100 0 <= Scen1_Pgt(3) <= 100 diff --git a/pysp/tests/unit/baselines/sizes3_ef.baseline.lp.gz b/pysp/tests/unit/baselines/sizes3_ef.baseline.lp.gz index ba463026e1fab5ff563ec1e327d63243fc8357b1..d93b243e2358a4093384c42f40d2caf182318f9e 100644 GIT binary patch literal 10613 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 L-)jOj;U4`D7pg24 literal 10586 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 From 1deea042f66715b179a412afd00e1254d375762e Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 20 May 2021 16:59:08 -0600 Subject: [PATCH 8/8] Update ReferenceModel to remove implicit ranged inequality statements --- examples/networkx_scenariotree/ReferenceModel.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/networkx_scenariotree/ReferenceModel.py b/examples/networkx_scenariotree/ReferenceModel.py index 711ac1f..d51bab3 100644 --- a/examples/networkx_scenariotree/ReferenceModel.py +++ b/examples/networkx_scenariotree/ReferenceModel.py @@ -32,7 +32,7 @@ def pysp_instance_creation_callback(scenario_name, node_names): model.SecondStageCost.expr = (model.xu0 - 1)**2 model.y0 = aml.Var() - model.c.add(expr= -10 <= model.y0 <= 10) + model.c.add(expr= aml.inequality(-10, model.y0, 10)) if scenario_name == "u00": model.yu00 = aml.Var() model.c.add(model.yu00 == model.y0) @@ -50,7 +50,7 @@ def pysp_instance_creation_callback(scenario_name, node_names): model.SecondStageCost.expr = (model.xu1 + 1)**2 model.y1 = aml.Var() - model.c.add(expr= -10 <= model.y1 <= 10) + model.c.add(expr= aml.inequality(-10, model.y1, 10)) if scenario_name == "u10": model.yu10 = aml.Var() model.c.add(model.yu10 == model.y1) @@ -68,7 +68,7 @@ def pysp_instance_creation_callback(scenario_name, node_names): model.SecondStageCost.expr = (model.xu2 - 0.5)**2 model.y2 = aml.Var() - model.c.add(expr= -10 <= model.y2 <= 10) + model.c.add(expr= aml.inequality(-10, model.y2, 10)) if scenario_name == "u20": model.yu20 = aml.Var() model.c.add(model.yu20 == model.y2)