2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Получение значений в LPSolve
Сообщение08.02.2019, 08:50 
Аватара пользователя
Добрый день!

Помогите, пожалуйста. Мало вижу русскоязычной информации про LPSolve. Вызываю его в своем приложении. Сначала формирую файл с задачей линейного программирования. Потом вызываю экзешник, потом вывожу решение в текстовый файл. Не знаю, как можно более гибко работать с полученным решением. Потому что у меня кое-что меняется в условиях задачи (в коэффициентах). То есть сами задачи формируются в цикле. И решаются в цикле. Получается, 100000 моделей и 100000 текстовых файлов. Приходится каждый открывать вручную и копировать параметры и соответствующее им решение в общий файл, чтобы можно было сравнить и проанализировать. Если бы я могла присваивать значения из решения в переменные, то я могла бы выводить их в общий файл (excel, например), с соответствующими коэффициентами. И было бы проще проводить дальнейший анализ.
Код:
int count = 0;
for (...)
                std::string command, num, filename;
                num = std::to_string(count);
                filename = "model" + num + ".lp";
                const char* fn = filename.c_str();
                FILE* file;
                fopen_s(&file, fn, "w");
                fprintf(file, "%f x12 + %f x13 + %f x14 + %f x15 - %f <= ksi;\n",....)
                .....
                fclose(file);
                command = "lp_solve -s " + filename + " >" + num + ".txt";
                const char* cmnd = command.c_str();
                system(cmnd);
                count++;

 
 
 
 Re: Получение значений в LPSolve
Сообщение08.02.2019, 10:13 
Какие-то разделители ведь присутствуют в текстовом выводе решения lpsolve: пробел, перевод строки, точка с запятой, запятая? Вот на основе этих разделителей и организовать логику загрузки полученных данных решений. Но сомнительно использовать для анализа данных excel. У него количество строк на лист ограничено 64000, а у Вас 100000 моделей. Логичнее загружать такой объем данных для дальнейшей обработки в какую-то базу данных (например sqlite, firebird и т.п.), и уже в дальнейшем делать аналитические sql-выборки из неё.

 
 
 
 Re: Получение значений в LPSolve
Сообщение09.02.2019, 16:43 
Аватара пользователя
Вывод так выглядит. Да, можно по пробелам и переводу строки. Или даже искать имя переменной в файле. Каждое один раз встречается. Просто я думаю, что сам LPSolve решение в переменных хранит. А потом уже формирует файл с выводом. Вроде как-то возможно использовать команды LPSolve в своем приложении. Может, у кого-то есть опыт работы с командами LPSolve в своем коде? Информация в основном на английском. Я пока научилась только в своем приложении запускать экзешник и выводить в файл. Но как-то это не гибко.


Вывод:

Value of objective function: 0.13445992

Actual values of the variables:
ksi 0.13446
x12 7.55973e-006
x13 7.125e-006
x14 7.875e-006
x15 7.875e-006
x22 4.011e-006
x23 8.001e-006
x24 1.1928e-005
x25 1.57185e-005
x31 7.125e-006
x32 7.875e-006
x33 7.875e-006
x34 7.125e-006
x35 7.73471e-006

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group