Skip to content

Commit

Permalink
Beginning to add support for an MPS reader
Browse files Browse the repository at this point in the history
  • Loading branch information
poulson committed Dec 30, 2016
1 parent f717f2c commit 1083942
Show file tree
Hide file tree
Showing 19 changed files with 2,508 additions and 1,500 deletions.
30 changes: 30 additions & 0 deletions examples/optimization/MPS.cpp
@@ -0,0 +1,30 @@
/*
Copyright (c) 2009-2016, Jack Poulson
All rights reserved.
This file is part of Elemental and is under the BSD 2-Clause License,
which can be found in the LICENSE file in the root directory, or at
http://opensource.org/licenses/BSD-2-Clause
*/
#include <El.hpp>
using namespace El;

int main( int argc, char* argv[] )
{
Environment env( argc, argv );

try
{
const Int n = Input("--n","matrix width",100);
const string filename =
Input("--filename","MPS filename","adlittle.mps");
const bool compressed = Input("--compressed","compressed?",false);
ProcessInput();

AffineLPProblem<Matrix<double>,Matrix<double>> problem;
ReadMPS( problem, filename, compressed );
}
catch( std::exception& e ) { ReportException(e); }

return 0;
}
162 changes: 94 additions & 68 deletions include/El/optimization/CReflect.hpp
Expand Up @@ -31,19 +31,29 @@ inline ElMehrotraCtrl_s CReflect( const MehrotraCtrl<float>& ctrl )
ctrlC.maxStepRatio = ctrl.maxStepRatio;
ctrlC.system = CReflect(ctrl.system);
ctrlC.mehrotra = ctrl.mehrotra;
ctrlC.forceSameStep = ctrl.forceSameStep;
ctrlC.solveCtrl = CReflect(ctrl.solveCtrl);
ctrlC.resolveReg = ctrl.resolveReg;
ctrlC.outerEquil = ctrl.outerEquil;
ctrlC.basisSize = ctrl.basisSize;
ctrlC.print = ctrl.print;
ctrlC.time = ctrl.time;
ctrlC.wSafeMaxNorm = ctrl.wSafeMaxNorm;
ctrlC.wMaxLimit = ctrl.wMaxLimit;
ctrlC.ruizEquilTol = ctrl.ruizEquilTol;
ctrlC.ruizMaxIter = ctrl.ruizMaxIter;
ctrlC.diagEquilTol = ctrl.diagEquilTol;
ctrlC.checkResiduals = ctrl.checkResiduals;

auto centralityRuleRes =
ctrl.centralityRule.target<float(*)(float,float,float,float)>();
if( centralityRuleRes )
ctrlC.centralityRule = *centralityRuleRes;
else
RuntimeError("Could not convert centralityRule to C function pointer");

ctrlC.standardInitShift = ctrl.standardInitShift;
ctrlC.balanceTol = ctrl.balanceTol;
ctrlC.forceSameStep = ctrl.forceSameStep;
ctrlC.solveCtrl = CReflect(ctrl.solveCtrl);
ctrlC.resolveReg = ctrl.resolveReg;
ctrlC.outerEquil = ctrl.outerEquil;
ctrlC.basisSize = ctrl.basisSize;
ctrlC.print = ctrl.print;
ctrlC.time = ctrl.time;
ctrlC.wSafeMaxNorm = ctrl.wSafeMaxNorm;
ctrlC.wMaxLimit = ctrl.wMaxLimit;
ctrlC.ruizEquilTol = ctrl.ruizEquilTol;
ctrlC.ruizMaxIter = ctrl.ruizMaxIter;
ctrlC.diagEquilTol = ctrl.diagEquilTol;
ctrlC.checkResiduals = ctrl.checkResiduals;

ctrlC.reg0Tmp = ctrl.reg0Tmp;
ctrlC.reg1Tmp = ctrl.reg1Tmp;
Expand All @@ -65,19 +75,29 @@ inline ElMehrotraCtrl_d CReflect( const MehrotraCtrl<double>& ctrl )
ctrlC.maxStepRatio = ctrl.maxStepRatio;
ctrlC.system = CReflect(ctrl.system);
ctrlC.mehrotra = ctrl.mehrotra;
ctrlC.forceSameStep = ctrl.forceSameStep;
ctrlC.solveCtrl = CReflect(ctrl.solveCtrl);
ctrlC.resolveReg = ctrl.resolveReg;
ctrlC.outerEquil = ctrl.outerEquil;
ctrlC.basisSize = ctrl.basisSize;
ctrlC.print = ctrl.print;
ctrlC.time = ctrl.time;
ctrlC.wSafeMaxNorm = ctrl.wSafeMaxNorm;
ctrlC.wMaxLimit = ctrl.wMaxLimit;
ctrlC.ruizEquilTol = ctrl.ruizEquilTol;
ctrlC.ruizMaxIter = ctrl.ruizMaxIter;
ctrlC.diagEquilTol = ctrl.diagEquilTol;
ctrlC.checkResiduals = ctrl.checkResiduals;

auto centralityRuleRes =
ctrl.centralityRule.target<double(*)(double,double,double,double)>();
if( centralityRuleRes )
ctrlC.centralityRule = *centralityRuleRes;
else
RuntimeError("Could not convert centralityRule to C function pointer");

ctrlC.standardInitShift = ctrl.standardInitShift;
ctrlC.balanceTol = ctrl.balanceTol;
ctrlC.forceSameStep = ctrl.forceSameStep;
ctrlC.solveCtrl = CReflect(ctrl.solveCtrl);
ctrlC.resolveReg = ctrl.resolveReg;
ctrlC.outerEquil = ctrl.outerEquil;
ctrlC.basisSize = ctrl.basisSize;
ctrlC.print = ctrl.print;
ctrlC.time = ctrl.time;
ctrlC.wSafeMaxNorm = ctrl.wSafeMaxNorm;
ctrlC.wMaxLimit = ctrl.wMaxLimit;
ctrlC.ruizEquilTol = ctrl.ruizEquilTol;
ctrlC.ruizMaxIter = ctrl.ruizMaxIter;
ctrlC.diagEquilTol = ctrl.diagEquilTol;
ctrlC.checkResiduals = ctrl.checkResiduals;

ctrlC.reg0Tmp = ctrl.reg0Tmp;
ctrlC.reg1Tmp = ctrl.reg1Tmp;
Expand All @@ -91,27 +111,30 @@ inline ElMehrotraCtrl_d CReflect( const MehrotraCtrl<double>& ctrl )
inline MehrotraCtrl<float> CReflect( const ElMehrotraCtrl_s& ctrlC )
{
MehrotraCtrl<float> ctrl;
ctrl.primalInit = ctrlC.primalInit;
ctrl.dualInit = ctrlC.dualInit;
ctrl.minTol = ctrlC.minTol;
ctrl.targetTol = ctrlC.targetTol;
ctrl.maxIts = ctrlC.maxIts;
ctrl.maxStepRatio = ctrlC.maxStepRatio;
ctrl.system = CReflect(ctrlC.system);
ctrl.mehrotra = ctrlC.mehrotra;
ctrl.forceSameStep = ctrlC.forceSameStep;
ctrl.solveCtrl = CReflect(ctrlC.solveCtrl);
ctrl.resolveReg = ctrlC.resolveReg;
ctrl.outerEquil = ctrlC.outerEquil;
ctrl.basisSize = ctrlC.basisSize;
ctrl.print = ctrlC.print;
ctrl.time = ctrlC.time;
ctrl.wSafeMaxNorm = ctrlC.wSafeMaxNorm;
ctrl.wMaxLimit = ctrlC.wMaxLimit;
ctrl.ruizEquilTol = ctrlC.ruizEquilTol;
ctrl.ruizMaxIter = ctrlC.ruizMaxIter;
ctrl.diagEquilTol = ctrlC.diagEquilTol;
ctrl.checkResiduals = ctrlC.checkResiduals;
ctrl.primalInit = ctrlC.primalInit;
ctrl.dualInit = ctrlC.dualInit;
ctrl.minTol = ctrlC.minTol;
ctrl.targetTol = ctrlC.targetTol;
ctrl.maxIts = ctrlC.maxIts;
ctrl.maxStepRatio = ctrlC.maxStepRatio;
ctrl.system = CReflect(ctrlC.system);
ctrl.mehrotra = ctrlC.mehrotra;
ctrl.centralityRule = ctrlC.centralityRule;
ctrl.standardInitShift = ctrlC.standardInitShift;
ctrl.balanceTol = ctrlC.balanceTol;
ctrl.forceSameStep = ctrlC.forceSameStep;
ctrl.solveCtrl = CReflect(ctrlC.solveCtrl);
ctrl.resolveReg = ctrlC.resolveReg;
ctrl.outerEquil = ctrlC.outerEquil;
ctrl.basisSize = ctrlC.basisSize;
ctrl.print = ctrlC.print;
ctrl.time = ctrlC.time;
ctrl.wSafeMaxNorm = ctrlC.wSafeMaxNorm;
ctrl.wMaxLimit = ctrlC.wMaxLimit;
ctrl.ruizEquilTol = ctrlC.ruizEquilTol;
ctrl.ruizMaxIter = ctrlC.ruizMaxIter;
ctrl.diagEquilTol = ctrlC.diagEquilTol;
ctrl.checkResiduals = ctrlC.checkResiduals;

ctrl.reg0Tmp = ctrlC.reg0Tmp;
ctrl.reg1Tmp = ctrlC.reg1Tmp;
Expand All @@ -125,27 +148,30 @@ inline MehrotraCtrl<float> CReflect( const ElMehrotraCtrl_s& ctrlC )
inline MehrotraCtrl<double> CReflect( const ElMehrotraCtrl_d& ctrlC )
{
MehrotraCtrl<double> ctrl;
ctrl.primalInit = ctrlC.primalInit;
ctrl.dualInit = ctrlC.dualInit;
ctrl.minTol = ctrlC.minTol;
ctrl.targetTol = ctrlC.targetTol;
ctrl.maxIts = ctrlC.maxIts;
ctrl.maxStepRatio = ctrlC.maxStepRatio;
ctrl.system = CReflect(ctrlC.system);
ctrl.mehrotra = ctrlC.mehrotra;
ctrl.forceSameStep = ctrlC.forceSameStep;
ctrl.solveCtrl = CReflect(ctrlC.solveCtrl);
ctrl.resolveReg = ctrlC.resolveReg;
ctrl.outerEquil = ctrlC.outerEquil;
ctrl.basisSize = ctrlC.basisSize;
ctrl.print = ctrlC.print;
ctrl.time = ctrlC.time;
ctrl.wSafeMaxNorm = ctrlC.wSafeMaxNorm;
ctrl.wMaxLimit = ctrlC.wMaxLimit;
ctrl.ruizEquilTol = ctrlC.ruizEquilTol;
ctrl.ruizMaxIter = ctrlC.ruizMaxIter;
ctrl.diagEquilTol = ctrlC.diagEquilTol;
ctrl.checkResiduals = ctrlC.checkResiduals;
ctrl.primalInit = ctrlC.primalInit;
ctrl.dualInit = ctrlC.dualInit;
ctrl.minTol = ctrlC.minTol;
ctrl.targetTol = ctrlC.targetTol;
ctrl.maxIts = ctrlC.maxIts;
ctrl.maxStepRatio = ctrlC.maxStepRatio;
ctrl.system = CReflect(ctrlC.system);
ctrl.mehrotra = ctrlC.mehrotra;
ctrl.centralityRule = ctrlC.centralityRule;
ctrl.standardInitShift = ctrlC.standardInitShift;
ctrl.balanceTol = ctrlC.balanceTol;
ctrl.forceSameStep = ctrlC.forceSameStep;
ctrl.solveCtrl = CReflect(ctrlC.solveCtrl);
ctrl.resolveReg = ctrlC.resolveReg;
ctrl.outerEquil = ctrlC.outerEquil;
ctrl.basisSize = ctrlC.basisSize;
ctrl.print = ctrlC.print;
ctrl.time = ctrlC.time;
ctrl.wSafeMaxNorm = ctrlC.wSafeMaxNorm;
ctrl.wMaxLimit = ctrlC.wMaxLimit;
ctrl.ruizEquilTol = ctrlC.ruizEquilTol;
ctrl.ruizMaxIter = ctrlC.ruizMaxIter;
ctrl.diagEquilTol = ctrlC.diagEquilTol;
ctrl.checkResiduals = ctrlC.checkResiduals;

ctrl.reg0Tmp = ctrlC.reg0Tmp;
ctrl.reg1Tmp = ctrlC.reg1Tmp;
Expand Down
6 changes: 6 additions & 0 deletions include/El/optimization/solvers.h
Expand Up @@ -30,6 +30,9 @@ typedef struct {
float maxStepRatio;
ElKKTSystem system;
bool mehrotra;
float (*centralityRule)(float,float,float,float);
bool standardInitShift;
float balanceTol;
bool forceSameStep;
ElRegSolveCtrl_s solveCtrl;
bool resolveReg;
Expand Down Expand Up @@ -60,6 +63,9 @@ typedef struct {
double maxStepRatio;
ElKKTSystem system;
bool mehrotra;
double (*centralityRule)(double,double,double,double);
bool standardInitShift;
double balanceTol;
bool forceSameStep;
ElRegSolveCtrl_d solveCtrl;
bool resolveReg;
Expand Down

0 comments on commit 1083942

Please sign in to comment.