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

C# API

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

Для работы с ArhiCloud в приложениях на C# предварительно добавьте в перечень зависимостей файл ArhiPlex.cs, который расположен в директории с установленным ArhiPlex Remote Client в папке /include/C#/ArhiPlex.cs.

Рассмотрим пример запуска расчёта в простейшем проекте с использованием ArhiCloud в IDE Microsoft Visual Studio 2022.

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

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

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

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

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

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

Создайте проект

Сначала создайте проект приложения C#. Откройте Visual Studio и выберите "Создание проекта" в окне "Пуск".

alt text

В окне "Создание проекта" в фильтрах по языку программирования, платформам и типам проектов выберите "C#", "Windows" и "Консоль", соответственно.

Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и нажмите Далее.

alt text

В окне "Настроить новый проект" введите название проекта в поле "Имя проекта", например, test_cs_project, задайте путь к расположению проекта и затем щелкните Далее.

alt text

В окне "Дополнительные сведения" выберите .NET 8.0 для поля Платформа. Затем выберите Создать.

alt text

Visual Studio создаёт и открывает новый проект, включающий код по умолчанию вывода строки "Hello World". В редакторе кода замените весь код в Program.cs следующим содержимым.

using arhiplex;
namespace simple_mip
{
    internal class Program
    {
        static void Main(string[] args)
        {

            using (var model = new arhiplex.Model())
            {
                model.SetDblParam("time_limit", 10.0); //10 сек
                model.SetDblParam("mip_rel_gap", 0.0005); //0.05%

                var x1 = model.AddVariable(0, 1, 0.0,
                  Variable_type.binary, "x1");
                var x2 = model.AddVariable(-Model.Inf, Model.Inf, 0.0,
                  Variable_type.continuous, "x2");
                var x3 = model.AddVariable(0.0, Model.Inf, 0.0,
                  Variable_type.continuous, "x3");
                var x4 = model.AddVariable(-Model.Inf, Model.Inf, 0.0,
                  Variable_type.continuous, "x4");

                x3.SetLowerBound(1.1);
                x3.SetUpperBound(10.0);

                model.SetObjective(x1 + 2 * x2 - 0.1 * x3 - 3 * x4,
                  Objective_sense.maximize);

                model.AddConstraint(x1 + x2 <= 5, "c0");
                model.AddConstraint(2 * x1 - x2 >= 0, "c1");
                model.AddConstraint(-x1 + 3 * x2 >= 0, "c2");
                model.AddConstraint(x3 + x4 >= 0.5, "c3");

                var solve_result = model.SolveRemote("name_mapping.txt");

                var solve_time = solve_result.GetSolveTime();
                var solve_res = solve_result.GetSolveResult();
                var solution_status = solve_result.GetSolutionStatus();

                if (solve_res == Solve_result.success &&
                  (solution_status == Solution_status.optimal ||
                   solution_status == Solution_status.feasible))
                {
                    var gap = solve_result.GetRelativeGap();
                    var x1val = solve_result.GetVariableValue(x1);
                    var x2val = solve_result.GetVariableValue("x2");
                    var x3val = solve_result.GetVariableValue("x3");
                    var x4val = solve_result.GetVariableValue(x4);
                    System.Console.WriteLine($"Gap: {gap} \n");
                    System.Console.WriteLine($"Variables:\nx1: {x1val}\nx2: {x2val}\nx3: {x3val}\nx4: {x4val} \n");
                }

            }
        }
    }
}

Для сборки и запуска данного примера не хватает подключения зависимых C# файлов.

Подключите зависимости

Для построения запуска содержимого отсутствует зависимый файл ArhiPlex.cs. Вы можете подключить его одним из двух способов.

  1. Скопируйте файл из директории /include/C#/Arhiplex.cs в директорию проекта, разместите его рядом с файлом Program.cs.
  2. Добавьте его в список зависимостей через правый клик на название проекта в панели обозревателя решений -> "Добавить" -> "Существующий элемент". Найдите файл /include/C#/Arhiplex.cs в обозревателе и добавьте в проект.

alt text

Выполните файл с примером

После подключения файла Arhiplex.cs рассмотренный выше пример может быть успешно собран и запущен. После запуска решения Пользователю предоставляется лог расчёта математической модели, описанной в представленном примере.

alt text