Arhn - архитектура программирования

Как получить доступ к переменной решения ilog из Java?

У меня есть линейная проблема, смоделированная в IBM ILOG CPLEX Optimization Studio, которая возвращает правильные решения, то есть объективные значения. В целях моделирования я использую файл модели модели ILOG и файл данных, которые я вызываю из java:

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.");
             }

Теперь я хотел бы получить доступ к фактическому совпадению переменной решения [Matchable] из java.

В ILOG CPLEX Optimization Studio я использую следующую номенклатуру:

tuple bidAsk{
int b;
int a;  
}

{bidAsk} Matchable = ...;

dvar float match[Matchable];

В Java я получаю доступ к объективному значению следующим образом (который отлично работает):

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

Теперь, как мне получить доступ к переменной решения «совпадение»? Пока я начал с

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

но я не могу продвинуться дальше. Помощь очень ценится! Большое спасибо!

23.08.2012

Ответы:


1

Вы на правильном пути. Вам нужно получить кортежи, которые представляют каждый действительный bidAsk в Matchable, а затем использовать кортеж в качестве индекса в объекте переменной решения. Вот пример кода на Visual Basic (то, что я сейчас пишу, должно быть легко перевести на java):

  ' 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
12.04.2013

2

Вы можете получить значения переменных через IloCplex-Object следующим образом:

cplex.getValue([variable reference]);

Я никогда не импортировал такую ​​модель. Когда вы создаете модель на java, ссылки на переменные решения легко под рукой, но должен быть способ получить переменные. Вы можете проверить документацию:

cplex document

20.02.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..