C# API
Запуск расчётов в ArhiCloud может осуществляться из приложений на C#. В данном разделе описаны основные принципы работы с библиотекой для построения математических моделей и запуска расчётов.
Для работы с ArhiCloud в приложениях на C# предварительно добавьте в перечень зависимостей файл ArhiPlex.cs
, который расположен в директории с установленным ArhiPlex Remote Client в папке /include/C#/ArhiPlex.cs
.
Рассмотрим пример запуска расчёта в простейшем проекте с использованием ArhiCloud в IDE Microsoft Visual Studio 2022.
Где я могу найти перечень методов используемых библиотек?
Полный справочник API доступен по ссылке.
Выполните предварительные шаги
Для того, чтобы успешно запускать проекты с использованием ArhiCloud на своем ПК:
- Получите лицензионный ключ и установите его в качестве переменной окружения X_API_KEY вашей операционной системы
- Установите клиентское приложение ArhiPlex Remote Client для взаимодействия с ArhiCloud
Более подробно данные шаги описаны в разделе Быстрый старт.
Создайте проект
Сначала создайте проект приложения C#. Откройте Visual Studio и выберите "Создание проекта" в окне "Пуск".
В окне "Создание проекта" в фильтрах по языку программирования, платформам и типам проектов выберите "C#", "Windows" и "Консоль", соответственно.
Применив фильтры по языку, платформе и типу проекта, выберите шаблон Консольное приложение и нажмите Далее.
В окне "Настроить новый проект" введите название проекта в поле "Имя проекта", например, test_cs_project
, задайте путь к расположению проекта и затем щелкните Далее.
В окне "Дополнительные сведения" выберите .NET 8.0 для поля Платформа. Затем выберите Создать.
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
. Вы можете подключить его одним из двух способов.
- Скопируйте файл из директории
/include/C#/Arhiplex.cs
в директорию проекта, разместите его рядом с файлом Program.cs. - Добавьте его в список зависимостей через правый клик на название проекта в панели обозревателя решений -> "Добавить" -> "Существующий элемент". Найдите файл
/include/C#/Arhiplex.cs
в обозревателе и добавьте в проект.
Выполните файл с примером
После подключения файла Arhiplex.cs
рассмотренный выше пример может быть успешно собран и запущен. После запуска решения Пользователю предоставляется лог расчёта математической модели, описанной в представленном примере.