overhauled physics engine
This commit is contained in:
Vendored
+256
@@ -0,0 +1,256 @@
|
||||
/* -------------------------------------------------------------
|
||||
|
||||
This file is a component of SDPA
|
||||
Copyright (C) 2004-2013 SDPA Project
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
------------------------------------------------------------- */
|
||||
/*--------------------------------------------------
|
||||
sdpa_call.h
|
||||
--------------------------------------------------*/
|
||||
|
||||
/***************************************************
|
||||
In this header file,
|
||||
Do NOT use 'using namespace sdpa;'.
|
||||
Otherwise, if users define their OWN 'sdpa' namespace,
|
||||
it would be trouble.
|
||||
***************************************************/
|
||||
|
||||
|
||||
#ifndef __sdpa_call_h__
|
||||
#define __sdpa_call_h__
|
||||
|
||||
#include <sdpa_right.h>
|
||||
#include <sdpa_newton.h>
|
||||
#include <sdpa_chordal.h>
|
||||
#include <sdpa_parts.h>
|
||||
#include <sdpa_struct.h>
|
||||
#include <cstdio>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
/* The class list is generated by the following command
|
||||
$ grep class *.h | grep -v \; | grep -v SDPA | tr ':' ' ' | \
|
||||
awk '{print $2 " " $3 ";"}'
|
||||
*/
|
||||
|
||||
namespace sdpa {
|
||||
class BlockStruct;
|
||||
class Chordal;
|
||||
class Solutions;
|
||||
class InputData;
|
||||
class Residuals;
|
||||
class IO;
|
||||
class Lal;
|
||||
class Newton;
|
||||
class ComputeTime;
|
||||
class Parameter;
|
||||
class StepLength;
|
||||
class DirectionParameter;
|
||||
class Switch;
|
||||
class AverageComplementarity;
|
||||
class RatioInitResCurrentRes;
|
||||
class SolveInfo;
|
||||
class Phase;
|
||||
class Vector;
|
||||
class BlockVector;
|
||||
class SparseMatrix;
|
||||
class DenseMatrix;
|
||||
class SparseLinearSpace;
|
||||
class DenseLinearSpace;
|
||||
class Time;
|
||||
|
||||
class LIJV
|
||||
{
|
||||
public:
|
||||
int SDPl,LPl,i,j;
|
||||
double value;
|
||||
};
|
||||
};
|
||||
|
||||
class SDPA
|
||||
{
|
||||
public:
|
||||
|
||||
enum PhaseType {noINFO, pFEAS,dFEAS,pdFEAS,pdINF,
|
||||
pFEAS_dINF,pINF_dFEAS,pdOPT,pUNBD,dUNBD};
|
||||
enum ParameterType {PARAMETER_DEFAULT,
|
||||
PARAMETER_UNSTABLE_BUT_FAST,
|
||||
PARAMETER_STABLE_BUT_SLOW};
|
||||
|
||||
enum ConeType {SDP, SOCP, LP};
|
||||
// SOCP is not implemented in the current version.
|
||||
|
||||
enum SparseType {AUTO, SPARSE, DENSE};
|
||||
// SparseType is only for compatiblity with SDPA7
|
||||
// In SDPA-C, this always must be SPARSE.
|
||||
// enum SparseType {AUTO, SPARSE, DENSE};
|
||||
// when AUTO is set, the type is analyzed by the file extenstion.
|
||||
|
||||
SDPA();
|
||||
~SDPA();
|
||||
|
||||
void setParameterType(ParameterType type = PARAMETER_DEFAULT);
|
||||
void setParameterMaxIteration(int maxIteration);
|
||||
void setParameterEpsilonStar (double epsilonStar);
|
||||
void setParameterLambdaStar (double lambdaStar);
|
||||
void setParameterOmegaStar (double omegaStar);
|
||||
void setParameterLowerBound (double lowerBound);
|
||||
void setParameterUpperBound (double upperBound);
|
||||
void setParameterBetaStar (double betaStar);
|
||||
void setParameterBetaBar (double betaBar);
|
||||
void setParameterGammaStar (double gammaStar);
|
||||
void setParameterEpsilonDash (double epsilonDash);
|
||||
|
||||
void setParameterPrintXVec(char* xPrint);
|
||||
void setParameterPrintXMat(char* XPrint);
|
||||
void setParameterPrintYMat(char* YPrint);
|
||||
void setParameterPrintInformation(char* infPrint);
|
||||
|
||||
void setDisplay(FILE* Display = stdout);
|
||||
void setResultFile(FILE* fpout = stdout);
|
||||
|
||||
void setNumThreads(int NumThreads=0);
|
||||
|
||||
ParameterType getParameterType();
|
||||
int getParameterMaxIteration();
|
||||
double getParameterEpsilonStar ();
|
||||
double getParameterLambdaStar ();
|
||||
double getParameterOmegaStar ();
|
||||
double getParameterLowerBound ();
|
||||
double getParameterUpperBound ();
|
||||
double getParameterBetaStar ();
|
||||
double getParameterBetaBar ();
|
||||
double getParameterGammaStar ();
|
||||
double getParameterEpsilonDash ();
|
||||
|
||||
char* getParameterPrintXVec();
|
||||
char* getParameterPrintXMat();
|
||||
char* getParameterPrintYMat();
|
||||
char* getParameterPrintInformation();
|
||||
|
||||
FILE* getDisplay();
|
||||
FILE* getResultFile();
|
||||
bool getInitPoint();
|
||||
|
||||
int getNumThreads();
|
||||
|
||||
void inputConstraintNumber(int m);
|
||||
void inputBlockNumber(int nBlock);
|
||||
void inputBlockSize(int l, int size);
|
||||
void inputBlockType(int l, ConeType coneType);
|
||||
void inputCVec(int k, double value);
|
||||
void inputElement(int k, int l, int i, int j, double value,
|
||||
bool inputCheck = false);
|
||||
void inputInitXVec(int k, double value);
|
||||
void inputInitXMat(int l, int i, int j, double value);
|
||||
void inputInitYMat(int l, int i, int j, double value);
|
||||
|
||||
void initializeUpperTriangleSpace();
|
||||
void initializeUpperTriangle(bool inputTwiceCheck = false);
|
||||
void initializeSolve();
|
||||
|
||||
void solve();
|
||||
|
||||
double* getResultXVec();
|
||||
double* getResultXMat(int l);
|
||||
double* getResultYMat(int l);
|
||||
double getPrimalObj();
|
||||
double getDualObj();
|
||||
double getPrimalError();
|
||||
double getDualError();
|
||||
double getDigits();
|
||||
int getIteration();
|
||||
double getMu();
|
||||
double getDualityGap();
|
||||
PhaseType getPhaseValue();
|
||||
void getPhaseString(char* str);
|
||||
double getSolveTime();
|
||||
|
||||
int getConstraintNumber();
|
||||
int getBlockNumber();
|
||||
int getBlockSize(int l);
|
||||
ConeType getBlockType(int l);
|
||||
|
||||
void getDimacsError(double* DimacsError);
|
||||
void printDimacsError(double* DimacsError, char* printFormat,
|
||||
FILE* fp = stdout);
|
||||
|
||||
void printResultXVec(FILE* fp = stdout);
|
||||
void printResultXMat(FILE* fp = stdout);
|
||||
void printResultYMat(FILE* fp = stdout);
|
||||
void printComputationTime(FILE* fp = stdout);
|
||||
void printParameters(FILE* fp = stdout);
|
||||
|
||||
bool judgeDimacsAvailability(); // for only SDPA-C
|
||||
|
||||
static void printSDPAVersion(FILE* fp = stdout);
|
||||
|
||||
void readInput(char* filename, FILE* fpout = NULL);
|
||||
void readParameter(char* filename, FILE* fpout = NULL);
|
||||
void writeInputSparse(char* filename, char* printFormat);
|
||||
void writeInitSparse(char* filename, char* printFormat);
|
||||
|
||||
void finalize();
|
||||
void copyCurrentToInit();
|
||||
|
||||
// setKappa is for only SDPA developers
|
||||
void setKappa(double KAPPA);
|
||||
|
||||
// // for debugging, private is replaced by public
|
||||
// public:
|
||||
private:
|
||||
double KAPPA;
|
||||
int m;
|
||||
int nBlock;
|
||||
FILE* Display;
|
||||
FILE* fpout;
|
||||
bool isInitPoint;
|
||||
ParameterType typeParameter;
|
||||
|
||||
int pIteration;
|
||||
|
||||
sdpa::ComputeTime com;
|
||||
sdpa::Parameter param;
|
||||
sdpa::BlockStruct bs;
|
||||
sdpa::InputData inputData;
|
||||
sdpa::Newton newton;
|
||||
sdpa::Chordal chordal;
|
||||
sdpa::Solutions currentPt;
|
||||
sdpa::DenseLinearSpace initPt_xMat;
|
||||
sdpa::DenseLinearSpace initPt_zMat;
|
||||
sdpa::Residuals currentRes;
|
||||
sdpa::StepLength alpha;
|
||||
sdpa::DirectionParameter beta;
|
||||
sdpa::Switch reduction;
|
||||
sdpa::AverageComplementarity mu;
|
||||
sdpa::RatioInitResCurrentRes theta;
|
||||
sdpa::SolveInfo solveInfo;
|
||||
sdpa::Phase phase;
|
||||
|
||||
|
||||
// temporary space to store
|
||||
// upper trianguler part non-zeros.
|
||||
vector<sdpa::LIJV*> * NonZeroElements;
|
||||
void printNonZeroElements(FILE* fpout = stdout);
|
||||
void checkNonZeroElements();
|
||||
void setNonZeroBlockStruct();
|
||||
void setNonZeroElements();
|
||||
|
||||
void printDimacsEasy(FILE* fpout = stdout); // heavy but for each iteration
|
||||
};
|
||||
|
||||
#endif // __sdpa_call_h__
|
||||
Reference in New Issue
Block a user