2012-08-23 2 views
2

필자는 IBM ILOG CPLEX Optimization Studio에서 모델링 된 선형 문제를 가지고있어 올바른 솔루션 즉 목표 값을 반환합니다. 이제java에서 ilog 결정 변수에 액세스하는 방법은 무엇입니까?

IloOplFactory.setDebugMode(false); 
IloOplFactory oplF = new IloOplFactory(); 
IloOplErrorHandler errHandler = oplF.createOplErrorHandler(System.out); 
IloOplModelSource modelSource = oplF.createOplModelSource("CDA_Welfare_Examination_sparse2.mod"); 
IloCplex cplex = oplF.createCplex(); 
IloOplSettings settings = oplF.createOplSettings(errHandler); 
IloOplModelDefinition def=oplF.createOplModelDefinition(modelSource,settings); 
IloOplModel opl=oplF.createOplModel(def,cplex); 

String inDataFile = path; 
IloOplDataSource dataSource=oplF.createOplDataSource(inDataFile); 
opl.addDataSource(dataSource); 

opl.generate(); 
opl.convertAllIntVars(); // converts integer bounds into LP compatible format 
if (cplex.solve()){        
} 
else{ 
System.out.println("Solution could not be achieved, probably insufficient memory or some other weird problem."); 
      } 

, 나는 자바에서 실제 의사 결정 변수 일치 [정합 가능한]를 액세스 할 수 싶습니다 시뮬레이션을 위해 나는 ILOG 모델 모델 파일과 나는 자바에서 모두 호출 데이터 파일을 사용합니다.

ILOG CPLEX 최적화 스튜디오에서

나는 다음과 같은 nomenclatura 사용 : 자바에서

tuple bidAsk{ 
int b; 
int a; 
} 

{bidAsk} Matchable = ...; 

dvar float match[Matchable]; 

나는 다음과 같은 방법으로 목표 값에 액세스 (잘 작동) : 이제

double sol = new Double(opl.getSolutionGetter().getObjValue()); 

을 수행하는 방법 결정 변수 "match"에 액세스합니까? 지금까지 나는 시작했습니다

IloOplElement dVarMatch = opl.getElement("match"); 

그러나 나는 더 이상 얻을 수없는 것 같습니다. 도움말은 대단히 감사합니다! 고마워요!

답변

2

당신이 올바른 궤도에있어 : ​​당신은 문서를 확인할 수 있습니다. Matchable의 각 유효한 bidAsk를 나타내는 튜플을 가져와야하며 그 다음 튜플을 결정 변수 객체의 인덱스로 사용해야합니다. Visual Basic의 샘플 코드는 다음과 같습니다. (지금 당장 작성해야 할 것은 자바로 변환하기 쉽습니다.)

' Get the tuple set named "Matchable" 
    Dim matchable As ITupleSet = opl.GetElement("Matchable").AsTupleSet 
    ' Get the decision variables named "match" 
    Dim match As INumVarMap = opl.GetElement("match").AsNumVarMap 

    ' Loop through each bidAsk in Matchable 
    For Each bidAsk As ITuple In matchable 
    ' This is the current bidAsk's 'b' value 
    Dim b As Integer = bidAsk.GetIntValue("b") 

    ' This is the current bidAsk's 'a' value 
    Dim a As Integer = bidAsk.GetIntValue("a") 

    ' this is another way to get bidAsk.b and bidAsk.a 
    b = bidAsk.GetIntValue(0) 
    a = bidAsk.GetIntValue(1) 

    ' This is the decision variable object for match[<b,a>] 
    Dim this_variable As INumVar = match.Get(bidAsk) 

    ' This is the value of that decision variable in the current solution 
    Dim val As Double = opl.Cplex.GetValue(this_variable) 
    Next 
1

당신은 그와 같은 IloCplex - 객체를 통해 변수 값을 얻을 수 있습니다 : 그 같은 모델을 수입하지

cplex.getValue([variable reference]); 

. Java로 모델을 생성 할 때 결정 변수에 대한 참조는 쉽게 이루어 지지만 변수를 얻을 수있는 방법이 있어야합니다.

cplex docu