ltbams 1.0.0__py3-none-any.whl → 1.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ams/_version.py +4 -4
- ams/main.py +0 -2
- ams/shared.py +29 -0
- docs/source/conf.py +3 -0
- docs/source/getting_started/install.rst +8 -11
- docs/source/images/curent.ico +0 -0
- docs/source/release-notes.rst +13 -0
- {ltbams-1.0.0.dist-info → ltbams-1.0.2.dist-info}/METADATA +15 -31
- ltbams-1.0.2.dist-info/RECORD +188 -0
- ltbams-1.0.2.dist-info/top_level.txt +3 -0
- tests/test_report.py +11 -5
- tests/test_rtn_ed.py +10 -6
- tests/test_rtn_rted.py +9 -9
- tests/test_rtn_uc.py +25 -25
- ams/routines/pflow1.py +0 -156
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_20_1.png +0 -0
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_37_1.png +0 -0
- docs/build/doctrees/nbsphinx/_examples_demo_demo_AGC_39_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_20_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_37_1.png +0 -0
- docs/build/html/_images/_examples_demo_demo_AGC_39_1.png +0 -0
- docs/build/html/_images/xlsx.png +0 -0
- docs/build/html/_static/file.png +0 -0
- docs/build/html/_static/minus.png +0 -0
- docs/build/html/_static/plus.png +0 -0
- docs/source/_generated/_generated/ams.core.model.Model.alter.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.doc.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.get.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.get_idx.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.idx2uid.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.list2array.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.set.rst +0 -6
- docs/source/_generated/_generated/ams.core.model.Model.set_backref.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.dtype.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.get_idx.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.param.RParam.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.LoadScale.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.MinDur.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumExpandDim.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumHstack.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOp.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.NumOpDual.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RBaseService.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ROperationService.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.RampSub.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ValueService.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarReduction.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.VarSelect.v1.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.assign_memory.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.get_names.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.n.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.parse.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.shape.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.size.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.update.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v0.rst +0 -6
- docs/source/_generated/_generated/ams.core.service.ZonalSum.v1.rst +0 -6
- docs/source/_generated/_generated/ams.interface.Dynamic.is_tds.rst +0 -6
- docs/source/_generated/_generated/ams.interface.Dynamic.link_andes.rst +0 -6
- docs/source/_generated/_generated/ams.interface.Dynamic.receive.rst +0 -6
- docs/source/_generated/_generated/ams.interface.Dynamic.send.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.e.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.constraint.Constraint.v.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.e.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.get_idx.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.exprcalc.ExpressionCalc.v.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.e.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.get_idx.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.expression.Expression.v.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.e.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.objective.Objective.v.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.finalize.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.init.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.initialized.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModel.update.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.finalize.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.init.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.initialized.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.omodel.OModelBase.update.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.optbase.OptzBase.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.param.Param.update.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.evaluate.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.get_idx.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.n.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.parse.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.shape.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.size.rst +0 -6
- docs/source/_generated/_generated/ams.opt.var.Var.v.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addConstrs.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addRParam.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addService.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.addVars.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.dc2ac.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.disable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.doc.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.enable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.export_csv.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.get.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.init.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.run.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.set.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.solve.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.summary.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.unpack.rst +0 -6
- docs/source/_generated/_generated/ams.routines.dcopf.DCOPF.update.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addConstrs.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addRParam.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addService.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.addVars.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.dc2ac.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.disable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.doc.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.enable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.export_csv.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.get.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.init.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.run.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.set.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.solve.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.summary.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.unpack.rst +0 -6
- docs/source/_generated/_generated/ams.routines.pflow.PFlow.update.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addConstrs.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addRParam.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addService.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.addVars.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.class_name.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.dc2ac.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.disable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.doc.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.enable.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.export_csv.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.get.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.init.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.run.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.set.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.solve.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.summary.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.unpack.rst +0 -6
- docs/source/_generated/_generated/ams.routines.routine.RoutineBase.update.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.add.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.as_dict.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.calc_pu_coeff.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.call_models.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.collect_config.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.collect_ref.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.connectivity.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.e_clear.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.f_update.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.fg_to_dae.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.find_devices.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.find_models.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.from_ipysheet.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.g_islands.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.g_update.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.get_z.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.import_groups.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.import_models.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.import_routines.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.import_types.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.init.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.j_islands.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.j_update.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.l_update_eq.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.l_update_var.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.link_ext_param.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.precompile.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.prepare.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.reload.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.remove_pycapsule.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.report.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.reset.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.s_update_post.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.s_update_var.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.save_config.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.set_address.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.set_config.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.set_dae_names.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.set_output_subidx.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.set_var_arrays.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.setup.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.store_adder_setter.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.store_existing.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.store_no_check_init.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.store_sparse_pattern.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.store_switch_times.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.summary.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.supported_models.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.supported_routines.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.switch_action.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.to_andes.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.to_ipysheet.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.undill.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.vars_to_dae.rst +0 -6
- docs/source/_generated/_generated/ams.system.System.vars_to_models.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_last.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_filename_prefix_middle.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_last.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.display_parent_prefix_middle.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayable.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.displayname.rst +0 -6
- docs/source/_generated/_generated/ams.utils.paths.DisplayablePath.make_tree.rst +0 -6
- docs/source/_generated/ams.cli.create_parser.rst +0 -6
- docs/source/_generated/ams.cli.main.rst +0 -6
- docs/source/_generated/ams.cli.preamble.rst +0 -6
- docs/source/_generated/ams.cli.rst +0 -32
- docs/source/_generated/ams.core.model.Model.rst +0 -56
- docs/source/_generated/ams.core.model.rst +0 -30
- docs/source/_generated/ams.core.param.RParam.rst +0 -49
- docs/source/_generated/ams.core.param.rst +0 -30
- docs/source/_generated/ams.core.service.LoadScale.rst +0 -51
- docs/source/_generated/ams.core.service.MinDur.rst +0 -53
- docs/source/_generated/ams.core.service.NumExpandDim.rst +0 -53
- docs/source/_generated/ams.core.service.NumHstack.rst +0 -53
- docs/source/_generated/ams.core.service.NumOp.rst +0 -53
- docs/source/_generated/ams.core.service.NumOpDual.rst +0 -53
- docs/source/_generated/ams.core.service.RBaseService.rst +0 -51
- docs/source/_generated/ams.core.service.ROperationService.rst +0 -51
- docs/source/_generated/ams.core.service.RampSub.rst +0 -53
- docs/source/_generated/ams.core.service.ValueService.rst +0 -51
- docs/source/_generated/ams.core.service.VarReduction.rst +0 -53
- docs/source/_generated/ams.core.service.VarSelect.rst +0 -53
- docs/source/_generated/ams.core.service.ZonalSum.rst +0 -53
- docs/source/_generated/ams.core.service.rst +0 -42
- docs/source/_generated/ams.interface.Dynamic.rst +0 -41
- docs/source/_generated/ams.interface.build_group_table.rst +0 -6
- docs/source/_generated/ams.interface.make_link_table.rst +0 -6
- docs/source/_generated/ams.interface.parse_addfile.rst +0 -6
- docs/source/_generated/ams.interface.replace_dev.rst +0 -6
- docs/source/_generated/ams.interface.rst +0 -43
- docs/source/_generated/ams.interface.sync_adsys.rst +0 -6
- docs/source/_generated/ams.interface.to_andes.rst +0 -6
- docs/source/_generated/ams.interface.verify_pf.rst +0 -6
- docs/source/_generated/ams.io.guess.rst +0 -6
- docs/source/_generated/ams.io.json.rst +0 -30
- docs/source/_generated/ams.io.json.write.rst +0 -6
- docs/source/_generated/ams.io.matpower.mpc2system.rst +0 -6
- docs/source/_generated/ams.io.matpower.read.rst +0 -6
- docs/source/_generated/ams.io.matpower.rst +0 -33
- docs/source/_generated/ams.io.matpower.system2mpc.rst +0 -6
- docs/source/_generated/ams.io.matpower.testlines.rst +0 -6
- docs/source/_generated/ams.io.parse.rst +0 -6
- docs/source/_generated/ams.io.psse.rst +0 -23
- docs/source/_generated/ams.io.pypower.ppc2system.rst +0 -6
- docs/source/_generated/ams.io.pypower.py2ppc.rst +0 -6
- docs/source/_generated/ams.io.pypower.read.rst +0 -6
- docs/source/_generated/ams.io.pypower.rst +0 -34
- docs/source/_generated/ams.io.pypower.system2ppc.rst +0 -6
- docs/source/_generated/ams.io.pypower.testlines.rst +0 -6
- docs/source/_generated/ams.io.rst +0 -45
- docs/source/_generated/ams.io.xlsx.rst +0 -30
- docs/source/_generated/ams.io.xlsx.write.rst +0 -6
- docs/source/_generated/ams.main.config_logger.rst +0 -6
- docs/source/_generated/ams.main.demo.rst +0 -6
- docs/source/_generated/ams.main.doc.rst +0 -6
- docs/source/_generated/ams.main.edit_conf.rst +0 -6
- docs/source/_generated/ams.main.find_log_path.rst +0 -6
- docs/source/_generated/ams.main.load.rst +0 -6
- docs/source/_generated/ams.main.misc.rst +0 -6
- docs/source/_generated/ams.main.print_license.rst +0 -6
- docs/source/_generated/ams.main.remove_output.rst +0 -6
- docs/source/_generated/ams.main.rst +0 -44
- docs/source/_generated/ams.main.run.rst +0 -6
- docs/source/_generated/ams.main.run_case.rst +0 -6
- docs/source/_generated/ams.main.save_conf.rst +0 -6
- docs/source/_generated/ams.main.selftest.rst +0 -6
- docs/source/_generated/ams.main.set_logger_level.rst +0 -6
- docs/source/_generated/ams.main.versioninfo.rst +0 -6
- docs/source/_generated/ams.opt.constraint.Constraint.rst +0 -43
- docs/source/_generated/ams.opt.constraint.rst +0 -30
- docs/source/_generated/ams.opt.exprcalc.ExpressionCalc.rst +0 -46
- docs/source/_generated/ams.opt.exprcalc.rst +0 -30
- docs/source/_generated/ams.opt.expression.Expression.rst +0 -46
- docs/source/_generated/ams.opt.expression.rst +0 -30
- docs/source/_generated/ams.opt.objective.Objective.rst +0 -43
- docs/source/_generated/ams.opt.objective.rst +0 -30
- docs/source/_generated/ams.opt.omodel.OModel.rst +0 -48
- docs/source/_generated/ams.opt.omodel.OModelBase.rst +0 -48
- docs/source/_generated/ams.opt.omodel.rst +0 -31
- docs/source/_generated/ams.opt.optbase.OptzBase.rst +0 -41
- docs/source/_generated/ams.opt.optbase.ensure_mats_and_parsed.rst +0 -6
- docs/source/_generated/ams.opt.optbase.ensure_symbols.rst +0 -6
- docs/source/_generated/ams.opt.optbase.rst +0 -38
- docs/source/_generated/ams.opt.param.Param.rst +0 -44
- docs/source/_generated/ams.opt.param.rst +0 -30
- docs/source/_generated/ams.opt.rst +0 -40
- docs/source/_generated/ams.opt.var.Var.rst +0 -45
- docs/source/_generated/ams.opt.var.rst +0 -30
- docs/source/_generated/ams.routines.dcopf.DCOPF.rst +0 -83
- docs/source/_generated/ams.routines.dcopf.rst +0 -30
- docs/source/_generated/ams.routines.pflow.PFlow.rst +0 -83
- docs/source/_generated/ams.routines.pflow.rst +0 -30
- docs/source/_generated/ams.routines.routine.RoutineBase.rst +0 -83
- docs/source/_generated/ams.routines.routine.collect_data.rst +0 -6
- docs/source/_generated/ams.routines.routine.initialize_data_dict.rst +0 -6
- docs/source/_generated/ams.routines.routine.rst +0 -38
- docs/source/_generated/ams.system.System.rst +0 -189
- docs/source/_generated/ams.system.disable_method.rst +0 -6
- docs/source/_generated/ams.system.disable_methods.rst +0 -6
- docs/source/_generated/ams.system.example.rst +0 -6
- docs/source/_generated/ams.system.rst +0 -39
- docs/source/_generated/ams.utils.paths.DisplayablePath.rst +0 -42
- docs/source/_generated/ams.utils.paths.ams_root.rst +0 -6
- docs/source/_generated/ams.utils.paths.cases_root.rst +0 -6
- docs/source/_generated/ams.utils.paths.confirm_overwrite.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_case.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_config_path.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_dot_andes_path.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_log_dir.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_pkl_path.rst +0 -6
- docs/source/_generated/ams.utils.paths.get_pycode_path.rst +0 -6
- docs/source/_generated/ams.utils.paths.list_cases.rst +0 -6
- docs/source/_generated/ams.utils.paths.rst +0 -47
- docs/source/_generated/ams.utils.paths.tests_root.rst +0 -6
- docs/source/groupdoc/ACLine.rst +0 -92
- docs/source/groupdoc/ACShort.rst +0 -51
- docs/source/groupdoc/ACTopology.rst +0 -66
- docs/source/groupdoc/Collection.rst +0 -84
- docs/source/groupdoc/Cost.rst +0 -135
- docs/source/groupdoc/DG.rst +0 -204
- docs/source/groupdoc/Horizon.rst +0 -97
- docs/source/groupdoc/Information.rst +0 -36
- docs/source/groupdoc/RenGen.rst +0 -63
- docs/source/groupdoc/Reserve.rst +0 -135
- docs/source/groupdoc/StaticGen.rst +0 -229
- docs/source/groupdoc/StaticLoad.rst +0 -53
- docs/source/groupdoc/StaticShunt.rst +0 -45
- docs/source/groupdoc/Undefined.rst +0 -63
- docs/source/groupdoc/VSG.rst +0 -125
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.class_name.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.e.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.evaluate.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.n.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.parse.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.shape.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.size.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Constraint.v.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.class_name.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.evaluate.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.finalize.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.init.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.initialized.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.parse.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.OModel.update.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.class_name.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.e.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.evaluate.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.n.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.parse.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.shape.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.size.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Objective.v.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.class_name.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.evaluate.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.get_idx.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.n.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.parse.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.shape.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.size.rst +0 -6
- docs/source/modeling/_generated/_generated/ams.opt.Var.v.rst +0 -6
- docs/source/modeling/_generated/ams.opt.Constraint.rst +0 -43
- docs/source/modeling/_generated/ams.opt.OModel.rst +0 -48
- docs/source/modeling/_generated/ams.opt.Objective.rst +0 -43
- docs/source/modeling/_generated/ams.opt.Var.rst +0 -45
- docs/source/modelref.rst +0 -66
- docs/source/routineref.rst +0 -38
- docs/source/typedoc/ACED.rst +0 -91
- docs/source/typedoc/DCED.rst +0 -1869
- docs/source/typedoc/DCUC.rst +0 -899
- docs/source/typedoc/DED.rst +0 -390
- docs/source/typedoc/PF.rst +0 -376
- docs/source/typedoc/UndefinedType.rst +0 -8
- icebar/ips/ips.py +0 -668
- ltbams-1.0.0.dist-info/RECORD +0 -725
- ltbams-1.0.0.dist-info/top_level.txt +0 -5
- {ltbams-1.0.0.dist-info → ltbams-1.0.2.dist-info}/WHEEL +0 -0
- {ltbams-1.0.0.dist-info → ltbams-1.0.2.dist-info}/entry_points.txt +0 -0
icebar/ips/ips.py
DELETED
@@ -1,668 +0,0 @@
|
|
1
|
-
|
2
|
-
"""
|
3
|
-
Interior Point Solver (PIPS).
|
4
|
-
"""
|
5
|
-
|
6
|
-
# Original Author: Richard Lincoln
|
7
|
-
# Original License: BSD 3-Clause License
|
8
|
-
# PIPS is ported by Richard Lincoln from the MATLAB Interior Point Solver (MIPS)
|
9
|
-
# (v1.9) by Ray Zimmerman. MIPS is distributed as part of the MATPOWER
|
10
|
-
# project, developed at the Power System Engineering Research Center (PSERC),
|
11
|
-
# Cornell. See U{http://www.pserc.cornell.edu/matpower/} for more info.
|
12
|
-
# MIPS was ported by Ray Zimmerman from C code written by H. Wang for his
|
13
|
-
# PhD dissertation:
|
14
|
-
# - "On the Computation and Application of Multi-period
|
15
|
-
# Security-Constrained Optimal Power Flow for Real-time
|
16
|
-
# Electricity Market Operations", Cornell University, May 2007.
|
17
|
-
|
18
|
-
# Modifid by Jinning Wang, 2023
|
19
|
-
|
20
|
-
from numpy import array, Inf, any, isnan, ones, r_, finfo, \
|
21
|
-
zeros, dot, absolute, log, flatnonzero as find
|
22
|
-
|
23
|
-
from numpy.linalg import norm
|
24
|
-
|
25
|
-
from scipy.sparse import vstack, hstack, eye, csr_matrix as sparse
|
26
|
-
|
27
|
-
from pypower.pipsver import pipsver
|
28
|
-
from pypower.pplinsolve import pplinsolve
|
29
|
-
|
30
|
-
|
31
|
-
EPS = finfo(float).eps
|
32
|
-
|
33
|
-
|
34
|
-
def pips(f_fcn, x0=None, A=None, l=None, u=None, xmin=None, xmax=None,
|
35
|
-
gh_fcn=None, hess_fcn=None, opt=None):
|
36
|
-
"""Primal-dual interior point method for NLP (nonlinear programming).
|
37
|
-
Minimize a function F(X) beginning from a starting point M{x0}, subject to
|
38
|
-
optional linear and nonlinear constraints and variable bounds::
|
39
|
-
|
40
|
-
min f(x)
|
41
|
-
x
|
42
|
-
|
43
|
-
subject to::
|
44
|
-
|
45
|
-
g(x) = 0 (nonlinear equalities)
|
46
|
-
h(x) <= 0 (nonlinear inequalities)
|
47
|
-
l <= A*x <= u (linear constraints)
|
48
|
-
xmin <= x <= xmax (variable bounds)
|
49
|
-
|
50
|
-
Note: The calling syntax is almost identical to that of FMINCON from
|
51
|
-
MathWorks' Optimization Toolbox. The main difference is that the linear
|
52
|
-
constraints are specified with C{A}, C{L}, C{U} instead of C{A}, C{B},
|
53
|
-
C{Aeq}, C{Beq}. The functions for evaluating the objective function,
|
54
|
-
constraints and Hessian are identical.
|
55
|
-
|
56
|
-
Example from U{http://en.wikipedia.org/wiki/Nonlinear_programming}:
|
57
|
-
>>> from numpy import array, r_, float64, dot
|
58
|
-
>>> from scipy.sparse import csr_matrix
|
59
|
-
>>> def f2(x):
|
60
|
-
... f = -x[0] * x[1] - x[1] * x[2]
|
61
|
-
... df = -r_[x[1], x[0] + x[2], x[1]]
|
62
|
-
... # actually not used since 'hess_fcn' is provided
|
63
|
-
... d2f = -array([[0, 1, 0], [1, 0, 1], [0, 1, 0]], float64)
|
64
|
-
... return f, df, d2f
|
65
|
-
>>> def gh2(x):
|
66
|
-
... h = dot(array([[1, -1, 1],
|
67
|
-
... [1, 1, 1]]), x**2) + array([-2.0, -10.0])
|
68
|
-
... dh = 2 * csr_matrix(array([[ x[0], x[0]],
|
69
|
-
... [-x[1], x[1]],
|
70
|
-
... [ x[2], x[2]]]))
|
71
|
-
... g = array([])
|
72
|
-
... dg = None
|
73
|
-
... return h, g, dh, dg
|
74
|
-
>>> def hess2(x, lam, cost_mult=1):
|
75
|
-
... mu = lam["ineqnonlin"]
|
76
|
-
... a = r_[dot(2 * array([1, 1]), mu), -1, 0]
|
77
|
-
... b = r_[-1, dot(2 * array([-1, 1]), mu),-1]
|
78
|
-
... c = r_[0, -1, dot(2 * array([1, 1]), mu)]
|
79
|
-
... Lxx = csr_matrix(array([a, b, c]))
|
80
|
-
... return Lxx
|
81
|
-
>>> x0 = array([1, 1, 0], float64)
|
82
|
-
>>> solution = pips(f2, x0, gh_fcn=gh2, hess_fcn=hess2)
|
83
|
-
>>> round(solution["f"], 11) == -7.07106725919
|
84
|
-
True
|
85
|
-
>>> solution["output"]["iterations"]
|
86
|
-
8
|
87
|
-
|
88
|
-
Ported by Richard Lincoln from the MATLAB Interior Point Solver (MIPS)
|
89
|
-
(v1.9) by Ray Zimmerman. MIPS is distributed as part of the MATPOWER
|
90
|
-
project, developed at the Power System Engineering Research Center (PSERC) (PSERC),
|
91
|
-
Cornell. See U{http://www.pserc.cornell.edu/matpower/} for more info.
|
92
|
-
MIPS was ported by Ray Zimmerman from C code written by H. Wang for his
|
93
|
-
PhD dissertation:
|
94
|
-
- "On the Computation and Application of Multi-period
|
95
|
-
Security-Constrained Optimal Power Flow for Real-time
|
96
|
-
Electricity Market Operations", Cornell University, May 2007.
|
97
|
-
|
98
|
-
See also:
|
99
|
-
- H. Wang, C. E. Murillo-Sanchez, R. D. Zimmerman, R. J. Thomas,
|
100
|
-
"On Computational Issues of Market-Based Optimal Power Flow",
|
101
|
-
IEEE Transactions on Power Systems, Vol. 22, No. 3, Aug. 2007,
|
102
|
-
pp. 1185-1193.
|
103
|
-
|
104
|
-
All parameters are optional except C{f_fcn} and C{x0}.
|
105
|
-
@param f_fcn: Function that evaluates the objective function, its gradients
|
106
|
-
and Hessian for a given value of M{x}. If there are
|
107
|
-
nonlinear constraints, the Hessian information is provided
|
108
|
-
by the 'hess_fcn' argument and is not required here.
|
109
|
-
@type f_fcn: callable
|
110
|
-
@param x0: Starting value of optimization vector M{x}.
|
111
|
-
@type x0: array
|
112
|
-
@param A: Optional linear constraints.
|
113
|
-
@type A: csr_matrix
|
114
|
-
@param l: Optional linear constraints. Default values are M{-Inf}.
|
115
|
-
@type l: array
|
116
|
-
@param u: Optional linear constraints. Default values are M{Inf}.
|
117
|
-
@type u: array
|
118
|
-
@param xmin: Optional lower bounds on the M{x} variables, defaults are
|
119
|
-
M{-Inf}.
|
120
|
-
@type xmin: array
|
121
|
-
@param xmax: Optional upper bounds on the M{x} variables, defaults are
|
122
|
-
M{Inf}.
|
123
|
-
@type xmax: array
|
124
|
-
@param gh_fcn: Function that evaluates the optional nonlinear constraints
|
125
|
-
and their gradients for a given value of M{x}.
|
126
|
-
@type gh_fcn: callable
|
127
|
-
@param hess_fcn: Handle to function that computes the Hessian of the
|
128
|
-
Lagrangian for given values of M{x}, M{lambda} and M{mu},
|
129
|
-
where M{lambda} and M{mu} are the multipliers on the
|
130
|
-
equality and inequality constraints, M{g} and M{h},
|
131
|
-
respectively.
|
132
|
-
@type hess_fcn: callable
|
133
|
-
@param opt: optional options dictionary with the following keys, all of
|
134
|
-
which are also optional (default values shown in parentheses)
|
135
|
-
- C{verbose} (False) - Controls level of progress output
|
136
|
-
displayed
|
137
|
-
- C{feastol} (1e-6) - termination tolerance for feasibility
|
138
|
-
condition
|
139
|
-
- C{gradtol} (1e-6) - termination tolerance for gradient
|
140
|
-
condition
|
141
|
-
- C{comptol} (1e-6) - termination tolerance for
|
142
|
-
complementarity condition
|
143
|
-
- C{costtol} (1e-6) - termination tolerance for cost
|
144
|
-
condition
|
145
|
-
- C{max_it} (150) - maximum number of iterations
|
146
|
-
- C{step_control} (False) - set to True to enable step-size
|
147
|
-
control
|
148
|
-
- C{max_red} (20) - maximum number of step-size reductions if
|
149
|
-
step-control is on
|
150
|
-
- C{cost_mult} (1.0) - cost multiplier used to scale the
|
151
|
-
objective function for improved conditioning. Note: This
|
152
|
-
value is also passed as the 3rd argument to the Hessian
|
153
|
-
evaluation function so that it can appropriately scale the
|
154
|
-
objective function term in the Hessian of the Lagrangian.
|
155
|
-
@type opt: dict
|
156
|
-
|
157
|
-
@rtype: dict
|
158
|
-
@return: The solution dictionary has the following keys:
|
159
|
-
- C{x} - solution vector
|
160
|
-
- C{f} - final objective function value
|
161
|
-
- C{converged} - exit status
|
162
|
-
- True = first order optimality conditions satisfied
|
163
|
-
- False = maximum number of iterations reached
|
164
|
-
- None = numerically failed
|
165
|
-
- C{output} - output dictionary with keys:
|
166
|
-
- C{iterations} - number of iterations performed
|
167
|
-
- C{hist} - list of arrays with trajectories of the
|
168
|
-
following: feascond, gradcond, compcond, costcond, gamma,
|
169
|
-
stepsize, obj, alphap, alphad
|
170
|
-
- C{message} - exit message
|
171
|
-
- C{lmbda} - dictionary containing the Langrange and Kuhn-Tucker
|
172
|
-
multipliers on the constraints, with keys:
|
173
|
-
- C{eqnonlin} - nonlinear equality constraints
|
174
|
-
- C{ineqnonlin} - nonlinear inequality constraints
|
175
|
-
- C{mu_l} - lower (left-hand) limit on linear constraints
|
176
|
-
- C{mu_u} - upper (right-hand) limit on linear constraints
|
177
|
-
- C{lower} - lower bound on optimization variables
|
178
|
-
- C{upper} - upper bound on optimization variables
|
179
|
-
|
180
|
-
@see: U{http://www.pserc.cornell.edu/matpower/}
|
181
|
-
|
182
|
-
@author: Ray Zimmerman (PSERC Cornell)
|
183
|
-
"""
|
184
|
-
if isinstance(f_fcn, dict): # problem dict
|
185
|
-
p = f_fcn
|
186
|
-
f_fcn = p['f_fcn']
|
187
|
-
x0 = p['x0']
|
188
|
-
if 'opt' in p:
|
189
|
-
opt = p['opt']
|
190
|
-
if 'hess_fcn' in p:
|
191
|
-
hess_fcn = p['hess_fcn']
|
192
|
-
if 'gh_fcn' in p:
|
193
|
-
gh_fcn = p['gh_fcn']
|
194
|
-
if 'xmax' in p:
|
195
|
-
xmax = p['xmax']
|
196
|
-
if 'xmin' in p:
|
197
|
-
xmin = p['xmin']
|
198
|
-
if 'u' in p:
|
199
|
-
u = p['u']
|
200
|
-
if 'l' in p:
|
201
|
-
l = p['l']
|
202
|
-
if 'A' in p:
|
203
|
-
A = p['A']
|
204
|
-
|
205
|
-
nx = x0.shape[0] # number of variables
|
206
|
-
nA = A.shape[0] if A is not None else 0 # number of original linear constr
|
207
|
-
|
208
|
-
# default argument values
|
209
|
-
if l is None or len(l) == 0:
|
210
|
-
l = -Inf * ones(nA)
|
211
|
-
if u is None or len(u) == 0:
|
212
|
-
u = Inf * ones(nA)
|
213
|
-
if xmin is None or len(xmin) == 0:
|
214
|
-
xmin = -Inf * ones(x0.shape[0])
|
215
|
-
if xmax is None or len(xmax) == 0:
|
216
|
-
xmax = Inf * ones(x0.shape[0])
|
217
|
-
if gh_fcn is None:
|
218
|
-
nonlinear = False
|
219
|
-
gn = array([])
|
220
|
-
hn = array([])
|
221
|
-
else:
|
222
|
-
nonlinear = True
|
223
|
-
|
224
|
-
if opt is None:
|
225
|
-
opt = {}
|
226
|
-
# options
|
227
|
-
if "feastol" not in opt:
|
228
|
-
opt["feastol"] = 1e-06
|
229
|
-
if "gradtol" not in opt:
|
230
|
-
opt["gradtol"] = 1e-06
|
231
|
-
if "comptol" not in opt:
|
232
|
-
opt["comptol"] = 1e-06
|
233
|
-
if "costtol" not in opt:
|
234
|
-
opt["costtol"] = 1e-06
|
235
|
-
if "max_it" not in opt:
|
236
|
-
opt["max_it"] = 150
|
237
|
-
if "max_red" not in opt:
|
238
|
-
opt["max_red"] = 20
|
239
|
-
if "step_control" not in opt:
|
240
|
-
opt["step_control"] = False
|
241
|
-
if "cost_mult" not in opt:
|
242
|
-
opt["cost_mult"] = 1
|
243
|
-
if "verbose" not in opt:
|
244
|
-
opt["verbose"] = 0
|
245
|
-
|
246
|
-
# initialize history
|
247
|
-
hist = []
|
248
|
-
|
249
|
-
# constants
|
250
|
-
xi = 0.99995
|
251
|
-
sigma = 0.1
|
252
|
-
z0 = 1
|
253
|
-
alpha_min = 1e-8
|
254
|
-
rho_min = 0.95
|
255
|
-
rho_max = 1.05
|
256
|
-
mu_threshold = 1e-5
|
257
|
-
|
258
|
-
# initialize
|
259
|
-
i = 0 # iteration counter
|
260
|
-
converged = False # flag
|
261
|
-
eflag = False # exit flag
|
262
|
-
|
263
|
-
# add var limits to linear constraints
|
264
|
-
eyex = eye(nx, nx, format="csr")
|
265
|
-
AA = eyex if A is None else vstack([eyex, A], "csr")
|
266
|
-
ll = r_[xmin, l]
|
267
|
-
uu = r_[xmax, u]
|
268
|
-
|
269
|
-
# split up linear constraints
|
270
|
-
ieq = find(absolute(uu - ll) <= EPS)
|
271
|
-
igt = find((uu >= 1e10) & (ll > -1e10))
|
272
|
-
ilt = find((ll <= -1e10) & (uu < 1e10))
|
273
|
-
ibx = find((absolute(uu - ll) > EPS) & (uu < 1e10) & (ll > -1e10))
|
274
|
-
# zero-sized sparse matrices unsupported
|
275
|
-
Ae = AA[ieq, :] if len(ieq) else None
|
276
|
-
if len(ilt) or len(igt) or len(ibx):
|
277
|
-
idxs = [(1, ilt), (-1, igt), (1, ibx), (-1, ibx)]
|
278
|
-
Ai = vstack([sig * AA[idx, :] for sig, idx in idxs if len(idx)], 'csr')
|
279
|
-
else:
|
280
|
-
Ai = None
|
281
|
-
be = uu[ieq]
|
282
|
-
bi = r_[uu[ilt], -ll[igt], uu[ibx], -ll[ibx]]
|
283
|
-
|
284
|
-
# evaluate cost f(x0) and constraints g(x0), h(x0)
|
285
|
-
x = x0
|
286
|
-
f, df = f_fcn(x) # cost
|
287
|
-
f = f * opt["cost_mult"]
|
288
|
-
df = df * opt["cost_mult"]
|
289
|
-
if nonlinear:
|
290
|
-
hn, gn, dhn, dgn = gh_fcn(x) # nonlinear constraints
|
291
|
-
h = hn if Ai is None else r_[hn, Ai * x - bi] # inequality constraints
|
292
|
-
g = gn if Ae is None else r_[gn, Ae * x - be] # equality constraints
|
293
|
-
|
294
|
-
if (dhn is None) and (Ai is None):
|
295
|
-
dh = None
|
296
|
-
elif dhn is None:
|
297
|
-
dh = Ai.T
|
298
|
-
elif Ai is None:
|
299
|
-
dh = dhn
|
300
|
-
else:
|
301
|
-
dh = hstack([dhn, Ai.T])
|
302
|
-
|
303
|
-
if (dgn is None) and (Ae is None):
|
304
|
-
dg = None
|
305
|
-
elif dgn is None:
|
306
|
-
dg = Ae.T
|
307
|
-
elif Ae is None:
|
308
|
-
dg = dgn
|
309
|
-
else:
|
310
|
-
dg = hstack([dgn, Ae.T])
|
311
|
-
else:
|
312
|
-
h = -bi if Ai is None else Ai * x - bi # inequality constraints
|
313
|
-
g = -be if Ae is None else Ae * x - be # equality constraints
|
314
|
-
dh = None if Ai is None else Ai.T # 1st derivative of inequalities
|
315
|
-
dg = None if Ae is None else Ae.T # 1st derivative of equalities
|
316
|
-
|
317
|
-
# some dimensions
|
318
|
-
neq = g.shape[0] # number of equality constraints
|
319
|
-
niq = h.shape[0] # number of inequality constraints
|
320
|
-
neqnln = gn.shape[0] # number of nonlinear equality constraints
|
321
|
-
niqnln = hn.shape[0] # number of nonlinear inequality constraints
|
322
|
-
nlt = len(ilt) # number of upper bounded linear inequalities
|
323
|
-
ngt = len(igt) # number of lower bounded linear inequalities
|
324
|
-
nbx = len(ibx) # number of doubly bounded linear inequalities
|
325
|
-
|
326
|
-
# initialize gamma, lam, mu, z, e
|
327
|
-
gamma = 1 # barrier coefficient
|
328
|
-
lam = zeros(neq)
|
329
|
-
z = z0 * ones(niq)
|
330
|
-
mu = z0 * ones(niq)
|
331
|
-
k = find(h < -z0)
|
332
|
-
z[k] = -h[k]
|
333
|
-
k = find((gamma / z) > z0)
|
334
|
-
mu[k] = gamma / z[k]
|
335
|
-
e = ones(niq)
|
336
|
-
|
337
|
-
# check tolerance
|
338
|
-
f0 = f
|
339
|
-
if opt["step_control"]:
|
340
|
-
L = f + dot(lam, g) + dot(mu, h + z) - gamma * sum(log(z))
|
341
|
-
|
342
|
-
Lx = df.copy()
|
343
|
-
Lx = Lx + dg * lam if dg is not None else Lx
|
344
|
-
Lx = Lx + dh * mu if dh is not None else Lx
|
345
|
-
|
346
|
-
maxh = zeros(1) if len(h) == 0 else max(h)
|
347
|
-
|
348
|
-
gnorm = norm(g, Inf) if len(g) else 0.0
|
349
|
-
lam_norm = norm(lam, Inf) if len(lam) else 0.0
|
350
|
-
mu_norm = norm(mu, Inf) if len(mu) else 0.0
|
351
|
-
znorm = norm(z, Inf) if len(z) else 0.0
|
352
|
-
feascond = \
|
353
|
-
max([gnorm, maxh]) / (1 + max([norm(x, Inf), znorm]))
|
354
|
-
gradcond = \
|
355
|
-
norm(Lx, Inf) / (1 + max([lam_norm, mu_norm]))
|
356
|
-
compcond = dot(z, mu) / (1 + norm(x, Inf))
|
357
|
-
costcond = absolute(f - f0) / (1 + absolute(f0))
|
358
|
-
|
359
|
-
# save history
|
360
|
-
hist.append({'feascond': feascond, 'gradcond': gradcond,
|
361
|
-
'compcond': compcond, 'costcond': costcond, 'gamma': gamma,
|
362
|
-
'stepsize': 0, 'obj': f / opt["cost_mult"], 'alphap': 0, 'alphad': 0})
|
363
|
-
|
364
|
-
if opt["verbose"]:
|
365
|
-
s = '-sc' if opt["step_control"] else ''
|
366
|
-
v = pipsver('all')
|
367
|
-
print('Python Interior Point Solver - PIPS%s, Version %s, %s' %
|
368
|
-
(s, v['Version'], v['Date']))
|
369
|
-
if opt['verbose'] > 1:
|
370
|
-
print(" it objective step size feascond gradcond "
|
371
|
-
"compcond costcond ")
|
372
|
-
print("---- ------------ --------- ------------ ------------ "
|
373
|
-
"------------ ------------")
|
374
|
-
print("%3d %12.8g %10s %12g %12g %12g %12g" %
|
375
|
-
(i, (f / opt["cost_mult"]), "",
|
376
|
-
feascond, gradcond, compcond, costcond))
|
377
|
-
|
378
|
-
if feascond < opt["feastol"] and gradcond < opt["gradtol"] and \
|
379
|
-
compcond < opt["comptol"] and costcond < opt["costtol"]:
|
380
|
-
converged = True
|
381
|
-
if opt["verbose"]:
|
382
|
-
print("Converged!")
|
383
|
-
|
384
|
-
# do Newton iterations
|
385
|
-
while (not converged) and (i < opt["max_it"]):
|
386
|
-
# update iteration counter
|
387
|
-
i += 1
|
388
|
-
|
389
|
-
# compute update step
|
390
|
-
lmbda = {"eqnonlin": lam[range(neqnln)],
|
391
|
-
"ineqnonlin": mu[range(niqnln)]}
|
392
|
-
if nonlinear:
|
393
|
-
if hess_fcn is None:
|
394
|
-
print("pips: Hessian evaluation via finite differences "
|
395
|
-
"not yet implemented.\nPlease provide "
|
396
|
-
"your own hessian evaluation function.")
|
397
|
-
Lxx = hess_fcn(x, lmbda, opt["cost_mult"])
|
398
|
-
else:
|
399
|
-
_, _, d2f = f_fcn(x, True) # cost
|
400
|
-
Lxx = d2f * opt["cost_mult"]
|
401
|
-
rz = range(len(z))
|
402
|
-
zinvdiag = sparse((1.0 / z, (rz, rz))) if len(z) else None
|
403
|
-
rmu = range(len(mu))
|
404
|
-
mudiag = sparse((mu, (rmu, rmu))) if len(mu) else None
|
405
|
-
dh_zinv = None if dh is None else dh * zinvdiag
|
406
|
-
M = Lxx if dh is None else Lxx + dh_zinv * mudiag * dh.T
|
407
|
-
N = Lx if dh is None else Lx + dh_zinv * (mudiag * h + gamma * e)
|
408
|
-
|
409
|
-
Ab = sparse(M) if dg is None else vstack([
|
410
|
-
hstack([M, dg]),
|
411
|
-
hstack([dg.T, sparse((neq, neq))])
|
412
|
-
])
|
413
|
-
bb = r_[-N, -g]
|
414
|
-
|
415
|
-
dxdlam = pplinsolve(Ab.tocsr(), bb)
|
416
|
-
|
417
|
-
if any(isnan(dxdlam)):
|
418
|
-
if opt["verbose"]:
|
419
|
-
print('\nNumerically Failed\n')
|
420
|
-
eflag = -1
|
421
|
-
break
|
422
|
-
|
423
|
-
dx = dxdlam[:nx]
|
424
|
-
dlam = dxdlam[nx:nx + neq]
|
425
|
-
dz = -h - z if dh is None else -h - z - dh.T * dx
|
426
|
-
dmu = -mu if dh is None else -mu + zinvdiag * (gamma * e - mudiag * dz)
|
427
|
-
|
428
|
-
# optional step-size control
|
429
|
-
sc = False
|
430
|
-
if opt["step_control"]:
|
431
|
-
x1 = x + dx
|
432
|
-
|
433
|
-
# evaluate cost, constraints, derivatives at x1
|
434
|
-
f1, df1 = f_fcn(x1) # cost
|
435
|
-
f1 = f1 * opt["cost_mult"]
|
436
|
-
df1 = df1 * opt["cost_mult"]
|
437
|
-
if nonlinear:
|
438
|
-
hn1, gn1, dhn1, dgn1 = gh_fcn(x1) # nonlinear constraints
|
439
|
-
|
440
|
-
h1 = hn1 if Ai is None else r_[hn1, Ai * x1 - bi] # ieq constraints
|
441
|
-
g1 = gn1 if Ae is None else r_[gn1, Ae * x1 - be] # eq constraints
|
442
|
-
|
443
|
-
# 1st der of ieq
|
444
|
-
if (dhn1 is None) and (Ai is None):
|
445
|
-
dh1 = None
|
446
|
-
elif dhn1 is None:
|
447
|
-
dh1 = Ai.T
|
448
|
-
elif Ai is None:
|
449
|
-
dh1 = dhn1
|
450
|
-
else:
|
451
|
-
dh1 = hstack([dhn1, Ai.T])
|
452
|
-
|
453
|
-
# 1st der of eqs
|
454
|
-
if (dgn1 is None) and (Ae is None):
|
455
|
-
dg1 = None
|
456
|
-
elif dgn is None:
|
457
|
-
dg1 = Ae.T
|
458
|
-
elif Ae is None:
|
459
|
-
dg1 = dgn1
|
460
|
-
else:
|
461
|
-
dg1 = hstack([dgn1, Ae.T])
|
462
|
-
else:
|
463
|
-
h1 = -bi if Ai is None else Ai * x1 - bi # inequality constraints
|
464
|
-
g1 = -be if Ae is None else Ae * x1 - be # equality constraints
|
465
|
-
|
466
|
-
dh1 = dh # 1st derivative of inequalities
|
467
|
-
dg1 = dg # 1st derivative of equalities
|
468
|
-
|
469
|
-
# check tolerance
|
470
|
-
Lx1 = df1
|
471
|
-
Lx1 = Lx1 + dg1 * lam if dg1 is not None else Lx1
|
472
|
-
Lx1 = Lx1 + dh1 * mu if dh1 is not None else Lx1
|
473
|
-
|
474
|
-
maxh1 = zeros(1) if len(h1) == 0 else max(h1)
|
475
|
-
|
476
|
-
g1norm = norm(g1, Inf) if len(g1) else 0.0
|
477
|
-
lam1_norm = norm(lam, Inf) if len(lam) else 0.0
|
478
|
-
mu1_norm = norm(mu, Inf) if len(mu) else 0.0
|
479
|
-
z1norm = norm(z, Inf) if len(z) else 0.0
|
480
|
-
|
481
|
-
feascond1 = max([g1norm, maxh1]) / \
|
482
|
-
(1 + max([norm(x1, Inf), z1norm]))
|
483
|
-
gradcond1 = norm(Lx1, Inf) / (1 + max([lam1_norm, mu1_norm]))
|
484
|
-
|
485
|
-
if (feascond1 > feascond) and (gradcond1 > gradcond):
|
486
|
-
sc = True
|
487
|
-
if sc:
|
488
|
-
alpha = 1.0
|
489
|
-
for j in range(opt["max_red"]):
|
490
|
-
dx1 = alpha * dx
|
491
|
-
x1 = x + dx1
|
492
|
-
f1, _ = f_fcn(x1) # cost
|
493
|
-
f1 = f1 * opt["cost_mult"]
|
494
|
-
if nonlinear:
|
495
|
-
hn1, gn1, _, _ = gh_fcn(x1) # nonlinear constraints
|
496
|
-
h1 = hn1 if Ai is None else r_[hn1, Ai * x1 - bi] # inequality constraints
|
497
|
-
g1 = gn1 if Ae is None else r_[gn1, Ae * x1 - be] # equality constraints
|
498
|
-
else:
|
499
|
-
h1 = -bi if Ai is None else Ai * x1 - bi # inequality constraints
|
500
|
-
g1 = -be if Ae is None else Ae * x1 - be # equality constraints
|
501
|
-
|
502
|
-
L1 = f1 + dot(lam, g1) + dot(mu, h1 + z) - gamma * sum(log(z))
|
503
|
-
|
504
|
-
if opt["verbose"] > 2:
|
505
|
-
print(" %3d %10.5f" % (-j, norm(dx1)))
|
506
|
-
|
507
|
-
rho = (L1 - L) / (dot(Lx, dx1) + 0.5 * dot(dx1, Lxx * dx1))
|
508
|
-
|
509
|
-
if (rho > rho_min) and (rho < rho_max):
|
510
|
-
break
|
511
|
-
else:
|
512
|
-
alpha = alpha / 2.0
|
513
|
-
dx = alpha * dx
|
514
|
-
dz = alpha * dz
|
515
|
-
dlam = alpha * dlam
|
516
|
-
dmu = alpha * dmu
|
517
|
-
|
518
|
-
# do the update
|
519
|
-
k = find(dz < 0.0)
|
520
|
-
alphap = min([xi * min(z[k] / -dz[k]), 1]) if len(k) else 1.0
|
521
|
-
k = find(dmu < 0.0)
|
522
|
-
alphad = min([xi * min(mu[k] / -dmu[k]), 1]) if len(k) else 1.0
|
523
|
-
x = x + alphap * dx
|
524
|
-
z = z + alphap * dz
|
525
|
-
lam = lam + alphad * dlam
|
526
|
-
mu = mu + alphad * dmu
|
527
|
-
if niq > 0:
|
528
|
-
gamma = sigma * dot(z, mu) / niq
|
529
|
-
|
530
|
-
# evaluate cost, constraints, derivatives
|
531
|
-
f, df = f_fcn(x) # cost
|
532
|
-
f = f * opt["cost_mult"]
|
533
|
-
df = df * opt["cost_mult"]
|
534
|
-
if nonlinear:
|
535
|
-
hn, gn, dhn, dgn = gh_fcn(x) # nln constraints
|
536
|
-
# g = gn if Ai is None else r_[gn, Ai * x - bi] # ieq constraints
|
537
|
-
# h = hn if Ae is None else r_[hn, Ae * x - be] # eq constraints
|
538
|
-
h = hn if Ai is None else r_[hn, Ai * x - bi] # ieq constr
|
539
|
-
g = gn if Ae is None else r_[gn, Ae * x - be] # eq constr
|
540
|
-
|
541
|
-
if (dhn is None) and (Ai is None):
|
542
|
-
dh = None
|
543
|
-
elif dhn is None:
|
544
|
-
dh = Ai.T
|
545
|
-
elif Ai is None:
|
546
|
-
dh = dhn
|
547
|
-
else:
|
548
|
-
dh = hstack([dhn, Ai.T])
|
549
|
-
|
550
|
-
if (dgn is None) and (Ae is None):
|
551
|
-
dg = None
|
552
|
-
elif dgn is None:
|
553
|
-
dg = Ae.T
|
554
|
-
elif Ae is None:
|
555
|
-
dg = dgn
|
556
|
-
else:
|
557
|
-
dg = hstack([dgn, Ae.T])
|
558
|
-
else:
|
559
|
-
h = -bi if Ai is None else Ai * x - bi # inequality constraints
|
560
|
-
g = -be if Ae is None else Ae * x - be # equality constraints
|
561
|
-
# 1st derivatives are constant, still dh = Ai.T, dg = Ae.T
|
562
|
-
|
563
|
-
Lx = df
|
564
|
-
Lx = Lx + dg * lam if dg is not None else Lx
|
565
|
-
Lx = Lx + dh * mu if dh is not None else Lx
|
566
|
-
|
567
|
-
if len(h) == 0:
|
568
|
-
maxh = zeros(1)
|
569
|
-
else:
|
570
|
-
maxh = max(h)
|
571
|
-
|
572
|
-
gnorm = norm(g, Inf) if len(g) else 0.0
|
573
|
-
lam_norm = norm(lam, Inf) if len(lam) else 0.0
|
574
|
-
mu_norm = norm(mu, Inf) if len(mu) else 0.0
|
575
|
-
znorm = norm(z, Inf) if len(z) else 0.0
|
576
|
-
feascond = \
|
577
|
-
max([gnorm, maxh]) / (1 + max([norm(x, Inf), znorm]))
|
578
|
-
gradcond = \
|
579
|
-
norm(Lx, Inf) / (1 + max([lam_norm, mu_norm]))
|
580
|
-
compcond = dot(z, mu) / (1 + norm(x, Inf))
|
581
|
-
costcond = float(absolute(f - f0) / (1 + absolute(f0)))
|
582
|
-
|
583
|
-
hist.append({'feascond': feascond, 'gradcond': gradcond,
|
584
|
-
'compcond': compcond, 'costcond': costcond, 'gamma': gamma,
|
585
|
-
'stepsize': norm(dx), 'obj': f / opt["cost_mult"],
|
586
|
-
'alphap': alphap, 'alphad': alphad})
|
587
|
-
|
588
|
-
if opt["verbose"] > 1:
|
589
|
-
print("%3d %12.8g %10.5g %12g %12g %12g %12g" %
|
590
|
-
(i, (f / opt["cost_mult"]), norm(dx), feascond, gradcond,
|
591
|
-
compcond, costcond))
|
592
|
-
|
593
|
-
if feascond < opt["feastol"] and gradcond < opt["gradtol"] and \
|
594
|
-
compcond < opt["comptol"] and costcond < opt["costtol"]:
|
595
|
-
converged = True
|
596
|
-
if opt["verbose"]:
|
597
|
-
print("Converged!")
|
598
|
-
else:
|
599
|
-
if any(isnan(x)) or (alphap < alpha_min) or \
|
600
|
-
(alphad < alpha_min) or (gamma < EPS) or (gamma > 1.0 / EPS):
|
601
|
-
if opt["verbose"]:
|
602
|
-
print("Numerically failed.")
|
603
|
-
eflag = -1
|
604
|
-
break
|
605
|
-
f0 = f
|
606
|
-
|
607
|
-
if opt["step_control"]:
|
608
|
-
L = f + dot(lam, g) + dot(mu, (h + z)) - gamma * sum(log(z))
|
609
|
-
|
610
|
-
if opt["verbose"]:
|
611
|
-
if not converged:
|
612
|
-
print("Did not converge in %d iterations." % i)
|
613
|
-
|
614
|
-
# package results
|
615
|
-
if eflag != -1:
|
616
|
-
eflag = converged
|
617
|
-
|
618
|
-
if eflag == 0:
|
619
|
-
message = 'Did not converge'
|
620
|
-
elif eflag == 1:
|
621
|
-
message = 'Converged'
|
622
|
-
elif eflag == -1:
|
623
|
-
message = 'Numerically failed'
|
624
|
-
else:
|
625
|
-
raise
|
626
|
-
|
627
|
-
output = {"iterations": i, "hist": hist, "message": message}
|
628
|
-
|
629
|
-
# zero out multipliers on non-binding constraints
|
630
|
-
mu[find((h < -opt["feastol"]) & (mu < mu_threshold))] = 0.0
|
631
|
-
|
632
|
-
# un-scale cost and prices
|
633
|
-
f = f / opt["cost_mult"]
|
634
|
-
lam = lam / opt["cost_mult"]
|
635
|
-
mu = mu / opt["cost_mult"]
|
636
|
-
|
637
|
-
# re-package multipliers into struct
|
638
|
-
lam_lin = lam[neqnln:neq] # lambda for linear constraints
|
639
|
-
mu_lin = mu[niqnln:niq] # mu for linear constraints
|
640
|
-
kl = find(lam_lin < 0.0) # lower bound binding
|
641
|
-
ku = find(lam_lin > 0.0) # upper bound binding
|
642
|
-
|
643
|
-
mu_l = zeros(nx + nA)
|
644
|
-
mu_l[ieq[kl]] = -lam_lin[kl]
|
645
|
-
mu_l[igt] = mu_lin[nlt:nlt + ngt]
|
646
|
-
mu_l[ibx] = mu_lin[nlt + ngt + nbx:nlt + ngt + nbx + nbx]
|
647
|
-
|
648
|
-
mu_u = zeros(nx + nA)
|
649
|
-
mu_u[ieq[ku]] = lam_lin[ku]
|
650
|
-
mu_u[ilt] = mu_lin[:nlt]
|
651
|
-
mu_u[ibx] = mu_lin[nlt + ngt:nlt + ngt + nbx]
|
652
|
-
|
653
|
-
lmbda = {'mu_l': mu_l[nx:], 'mu_u': mu_u[nx:],
|
654
|
-
'lower': mu_l[:nx], 'upper': mu_u[:nx]}
|
655
|
-
|
656
|
-
if niqnln > 0:
|
657
|
-
lmbda['ineqnonlin'] = mu[:niqnln]
|
658
|
-
if neqnln > 0:
|
659
|
-
lmbda['eqnonlin'] = lam[:neqnln]
|
660
|
-
|
661
|
-
# lmbda = {"eqnonlin": lam[:neqnln], 'ineqnonlin': mu[:niqnln],
|
662
|
-
# "mu_l": mu_l[nx:], "mu_u": mu_u[nx:],
|
663
|
-
# "lower": mu_l[:nx], "upper": mu_u[:nx]}
|
664
|
-
|
665
|
-
solution = {"x": x, "f": f, "eflag": converged,
|
666
|
-
"output": output, "lmbda": lmbda}
|
667
|
-
|
668
|
-
return solution
|