Ответ руки от одной вызывающей Java-программы к другой

У меня вопрос о взаимодействии двух программ на Java, одна встраивает другую.

Встроенное приложение представляет собой линейную программу CPLEX (Java SE + CPLEX libs), которая вычисляет ресурсы, а другое корневое приложение представляет собой программное обеспечение для моделирования (AnyLogic). Теперь идея состоит в том, что моделирование должно использовать ресурсы, рассчитанные линейной программой.

Теперь я хочу, чтобы симуляция вызывала линейную программу, которая затем вычисляет ресурсы и возвращает их в виде массива или объекта, после чего симуляция продолжается.

Simulation (AnyLogic) ----> Linear Program (CPLEX)
             <--------(VALUES?)--------|

Моя проблема - "передать", не хватает шва возвращаемых значений (аргументов). Как я могу это сделать?

На данный момент я использую текстовый файл, в котором хранятся значения. Я читал о RMI и сокетах, но не знаю, настолько ли это хорошая идея.

Любая помощь приветствуется! Спасибо.


person lony    schedule 27.07.2014    source источник
comment
Что говорится в документации программы моделирования? Указывают ли они какой-либо способ вызова другой программы или добавления ваших собственных классов к моделированию?   -  person markspace    schedule 27.07.2014
comment
Ничего особенного, только наоборот. Запуск AnyLogic в другом приложении.   -  person lony    schedule 28.07.2014
comment
Судя по тексту (включая ответ и комментарии Дилана), я все еще не понимаю контекста. Что означает нехватка возвращаемых значений (аргументов)? Если ваша линейная программа (LP) - это Java, проблема в том, что (а) нет API, чтобы заставить ее вычислять, не запуская ее как приложение командной строки? (б) API не дает вам ответов в той форме, в которой вы хотите массив / объект? (c) что-то еще? Некоторые образцы Java были бы полезны, если вы пытались что-то кодировать, а это не сработало.   -  person Stuart Rossiter    schedule 29.10.2014


Ответы (1)


Один из способов сделать это - запустить вашу программу CPLEX с использованием Java Process. В первом ответе на этот вопрос подробно описано, как получить обратную связь от запущенного Process ( и как его запустить). В частности, он показывает, как запустить Process, который распечатывает свой вывод, который впоследствии считывается запускающей программой. Я полагаю, что ваша программа CPLEX могла бы распечатать любые соответствующие результаты, которые затем могла бы принять ваша симуляция AnyLogic с помощью описанного механизма.

person Dylan Knowles    schedule 20.10.2014
comment
Это работает, но разве это не хардкор? Поскольку обе программы являются Java, нет ничего лучше для сериализации данных. Таким образом, я также мог использовать свой CSV ex / import. Но действительно интересная идея, спасибо, это помогает мне с другой проблемой :) - person lony; 21.10.2014
comment
Насколько я знаю, это единственный способ сделать это. Впрочем, я согласен: это кажется громоздким. - person Dylan Knowles; 21.10.2014