📄 mpsfilewriter.java
字号:
package com.power.lpsolver.LPSolve;
import java.util.*;
import java.io.*;
import com.power.util.Message.*;
import com.power.pipe.*;
import com.power.util.urltools.*;
import com.power.util.Message.*;
import com.power.pipeengine.*;
public class MPSFileWriter
{
static ResourceBundle res = ResourceBundle.getBundle("com.power.lpsolver.LPSolve.Res",
EngineConfig.getInstance().getLocale() );
private static final MPSFileWriter INSTANCE =
new MPSFileWriter();
// Private constructor supresses
// default public constructor
private MPSFileWriter( ) {
}
public static MPSFileWriter getInstance( ) {
return INSTANCE;
}
private StringBuffer content = new StringBuffer();
private String urlAddr = GlobalConfig.getInstance().getLPServerURL() +
"com.power.pipeengine.LP_ReadWriteFile";
private void writeModelName() {
content.append( "NAME" );
content.append( " " );
content.append( "PARASTER\n" );
}
private void writeRows() {
MessageArea.getInstance().addMessage( res.getString( "WritingRows" ) + "...\n" );
content.append( "ROWS\n" );
Vector cons = Model.getInstance().getModelConstraints().getConstraints();
for( int i=0; i<cons.size(); i++ ) {
Constraint con = (Constraint) cons.elementAt( i );
content.append( con.getMPSRowType() );
content.append( con.getMPSRowName() + "\n" );
}
ObjectiveFunction objFunc = Model.getInstance().getObjectiveFunction();
content.append( objFunc.getMPSRowType() );
content.append( objFunc.getMPSRowName() + "\n" );
}
private void writeRHS() {
MessageArea.getInstance().addMessage( res.getString("WritingRHS") + "...\n" );
content.append( "RHS\n" );
Vector cons = Model.getInstance().getModelConstraints().getConstraints();
for( int i=0; i<cons.size(); i++ ) {
Constraint con = (Constraint) cons.elementAt( i );
if( con.getRHS() == 0.0 ) continue;
content.append( " RHS " );
content.append( con.getMPSRowName() );
content.append( " " + con.getRHS() + "\n" );
}
content.append( "ENDATA" );
}
private void writeColumns() {
MessageArea.getInstance().addMessage( res.getString("WritingColumns") + "...\n" );
content.append( "COLUMNS\n" );
Hashtable vars = Model.getInstance().getModelVariables().getVariablesByName();
Enumeration allVars = vars.elements();
ObjectiveFunction objFunc = Model.getInstance().getObjectiveFunction();
int cnt = 0;
while( allVars.hasMoreElements() ) {
cnt++;
if( (cnt%5000) == 0 ) {
MessageArea.getInstance().addMessage( "\t" + res.getString( "NumberOfVariablesWritten" )+ cnt + "\n" );
}
Variable aVar = (Variable) allVars.nextElement();
Vector cons = aVar.getCons();
Vector coeffs = aVar.getCoeffs();
for( int i=0; i<cons.size(); i++ ) {
content.append( " " );
content.append( aVar.getMPSName() );
content.append( " " + ((Constraint) cons.elementAt( i )).getMPSRowName() +
" " + ((Element) coeffs.elementAt( i )).getCoefficient() + "\n" );
}
Element elem = objFunc.getElementAt( aVar.getVarIdx() );
if( null == elem ) continue;
content.append( " " );
content.append( aVar.getMPSName() );
content.append( " " + objFunc.getMPSRowName() + " " + elem.getMPSValue() + "\n" );
}
}
public void write( String outDir ) {
MessageArea.getInstance().addMessage( res.getString( "WritingMPSModel" ) + "...\n" );
MessageArea.getInstance().addMessage( "\t" + res.getString( "TotalNumberOfConstraints" )+
Model.getInstance().getNumberOfRows() + "\n" );
MessageArea.getInstance().addMessage( "\t" + res.getString( "TotalNumberOfVariables" ) +
Model.getInstance().getNumberOfColumns() + "\n" );
writeModelName();
writeRows();
writeColumns();
writeRHS();
/*URLFileWriter.getInstance().deleteFile( urlAddr,
GlobalConfig.getInstance().getLPSolverWorkDir() + "model.mps",
"WriteModel" );*/
//int OneMB = 1024 * 1024;
//int i=0;
/*for( i=0; i<(content.length() - OneMB); i+=OneMB ) {
URLFileWriter.getInstance().write( urlAddr,
GlobalConfig.getInstance().getLPSolverWorkDir() + "model.mps",
"WriteModel",
content.substring( i, i + OneMB ) );
}
URLFileWriter.getInstance().write( urlAddr,
GlobalConfig.getInstance().getLPSolverWorkDir() + "model.mps",
"WriteModel",
content.substring( i, content.length() ) );*/
//URLFileWriter.getInstance().
URLFileWriter.getInstance().write( urlAddr,
GlobalConfig.getInstance().getLPSolverWorkDir() + "model.mps",
"WriteModel",
content.toString() );
MessageArea.getInstance().addMessage( res.getString( "FinishedWritingMPSModel" ) + "\n" );
content = new StringBuffer();
}
public void reset() {
content = new StringBuffer();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -