Перейти к содержанию

C++ API

Запуск расчётов в ArhiCloud может осуществляться из приложений на C++. В данном разделе описаны основные принципы работы с библиотекой для построения математических моделей и запуска расчётов.

Внимание

На текущий момент интерфейс для С++ поддерживается только для Windows и Ubuntu.

Для работы с ArhiCloud в приложениях на C++ выполните перечень предварительных шагов - подключите файлы заголовков и дополнительную билиотеку libarhiplex_cpp.lib.

В качестве примера рассмотрим процесс запуска решения с использованием IDE MS Visual Studio 2022.

Где я могу найти перечень методов используемых библиотек?

Полный справочник API доступен по ссылке.

Выполните предварительные шаги

Для того, чтобы успешно запускать проекты с использованием ArhiCloud на своем ПК:

  1. Получите лицензионный ключ и установите его в качестве переменной окружения X_API_KEY вашей операционной системы
  2. Установите клиентское приложение ArhiPlex Remote Client для взаимодействия с ArhiCloud

Более подробно данные шаги описаны в разделе Быстрый старт.

Подключите файлов заголовков

Создайте проект консольного приложения на C++ в Microsoft Visual Studio 2022.

alt text

alt text

Для использования возможностей построения моделей и запуска решения на C++ скопируйте папку include с файлами заголовков, расположенную в директории, в котороую было установлено приложение ArhiPlex Remote Client (обычно C:/Program Files/ArhiPlex Remote Client/) в каталог проекта. Для подключения в исполняемом файле укажите путь к основному файлу arhiplex_client.h:

#include "include/arhiplex_client.h"

Подключите библиотеки

Для построения проекта обязательно подключение библиотеки libarhiplex_cpp.lib. Для этого скопируем папку lib из директории, в которую установлено приложение ArhiPlex Remote Client в каталог проекта.

Далее в Свойствах проекта -> "Компоновщик" -> "Ввод" в поле "Дополнительные зависимости" укажите путь к файлу с библиотекой. Предварительно в выпадающем списке "Конфигурация" выберите "Все конфигурации".

alt text

Нажмите "ОК".

После подключения файлов заголовков и библиотеки возможно построение моделей и запуск решения в удалённом солвере 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