C++ API
Запуск расчётов в ArhiCloud может осуществляться из приложений на C++. В данном разделе описаны основные принципы работы с библиотекой для построения математических моделей и запуска расчётов.
Внимание
На текущий момент интерфейс для С++ поддерживается только для Windows и Ubuntu.
Для работы с ArhiCloud в приложениях на C++ выполните перечень предварительных шагов - подключите файлы заголовков и дополнительную билиотеку libarhiplex_cpp.lib
.
В качестве примера рассмотрим процесс запуска решения с использованием IDE MS Visual Studio 2022.
Где я могу найти перечень методов используемых библиотек?
Полный справочник API доступен по ссылке.
Выполните предварительные шаги
Для того, чтобы успешно запускать проекты с использованием ArhiCloud на своем ПК:
- Получите лицензионный ключ и установите его в качестве переменной окружения X_API_KEY вашей операционной системы
- Установите клиентское приложение ArhiPlex Remote Client для взаимодействия с ArhiCloud
Более подробно данные шаги описаны в разделе Быстрый старт.
Подключите файлов заголовков
Создайте проект консольного приложения на C++ в Microsoft Visual Studio 2022.
Для использования возможностей построения моделей и запуска решения на C++ скопируйте папку include
с файлами заголовков, расположенную в директории, в котороую было установлено приложение ArhiPlex Remote Client (обычно C:/Program Files/ArhiPlex Remote Client/
) в каталог проекта. Для подключения в исполняемом файле укажите путь к основному файлу arhiplex_client.h
:
Подключите библиотеки
Для построения проекта обязательно подключение библиотеки libarhiplex_cpp.lib
. Для этого скопируем папку lib
из директории, в которую установлено приложение ArhiPlex Remote Client в каталог проекта.
Далее в Свойствах проекта -> "Компоновщик" -> "Ввод" в поле "Дополнительные зависимости" укажите путь к файлу с библиотекой. Предварительно в выпадающем списке "Конфигурация" выберите "Все конфигурации".
Нажмите "ОК".
После подключения файлов заголовков и библиотеки возможно построение моделей и запуск решения в удалённом солвере ArhiCloud. Рассмотрим пример далее.
Пример решения для ArhiCloud на C++
Рассмотрим элементарный пример решения оптимизационной задачи с использованием ArhiCloud. В данном примере осуществляется импорт модели из файла .mps и запуск решения.
Перед запуском данного примера также скопируйте файл blp-ic98.mps из папки examples
каталога с установленным ArhiPlex Remote Client в каталог проекта.
#include <iostream>
#include "include/arhiplex_client.h"
int main(int argc, char* argv[])
{
try
{
using namespace arhiplex;
arhiplex::Model model;
model.Read("blp-ic98.mps");
model.SetDblParam("time_limit", 30.0);
model.SetDblParam("mip_rel_gap", 0.0005);
const char* name_mapping_file = "name_mapping.txt";
const auto solve_result = model.SolveRemote(name_mapping_file);
const auto solve_time = solve_result.GetSolveTime();
const auto solve_res = solve_result.GetSolveResult();
const auto solution_status = solve_result.GetSolutionStatus();
if (solve_res == solve_result::success &&
(solution_status == solution_status::optimal ||
solution_status == solution_status::feasible))
{
const auto gap = solve_result.GetRelativeGap();
const auto obj_value = solve_result.GetObjectiveFunctionValue();
std::cout << "Gap: " << gap << std::endl;
std::cout << "Objective Value: " << obj_value << std::endl;
}
std::cout << "Solve time: " << solve_time << std::endl;
}
catch (const arhiplex::arhiplex_exception& ex)
{
std::cout << ex.what() << std::endl;
}
catch (...)
{
std::cout << "Unknown exception occurs!";
}
return 0;
}
В случае корректного подключения библиотеки libarhiplex_cpp.lib
и файлов заголовков, при запуске полученного решения Пользователь может наблюдать процесс решения через демонстрируемый лог:
Запуск ArhiCloud
Права на использование (c) 2024 Arhitex
Параметры запуска:
presolve : on
problem_type : min
time_limit : 30
abs_gap : 1e-06
gap : 0.0005
primal_feasibility_tolerance : 1e-06
mip_feasibility_tolerance : 1e-06
remote_timeout : 300
Отправка запроса на расчет . . . успешно
UID: 20241031_123915_50caac
Начало загрузки модели . . . успешно
Ожидание начала расчета .
Запуск ArhiPlex 2.0.11.123984
Права на использование (c) 2024 Arhitex
Процессор Intel Xeon Processor (Icelake) [ AVX512, AVX2 ], физических ядер CPU: 26
Параметры запуска:
mip_rel_gap = 0.00050000
time_limit = 30.00000000
Оригинальная задача MILP blp-ic98.mps содержит ограничений: 717, переменных: 13640 (дробных: 90, бинарных: 13550, целых: 0)
Лучшая Граница | Лучшее Решение | Точность | Итераций | Время
------------------------+------------------------+--------------+--------------+-----------
4402.496739 | 5899.999043 | 25.38% | 35 | 0.5 с
4456.593117 | 4526.221618 | 1.54% | 14113 | 6.4 с
4466.783151 | 4518.343746 | 1.14% | 111234 | 13.1 с
4472.467386 | 4500.908523 | 0.63% | 407854 | 20.0 с
4479.994269 | 4494.884661 | 0.33% | 782026 | 26.4 с
Отчет
Статус : Лимит времени исчерпан
Первичная граница : 4492.2684352
Двойственная граница : 4485.40461859
Отклонение : 0.153%
Статус решения : Достижимо
Время : 30.3 с.
Ноды(листья) : 30851
LP итераций : 1015298
Gap: 0.00152792
Objective Value: 4492.27
Solve time: 30.2506