Реализация программного комплекса для решения задач линейного программирования на платформе Visual Studio C#

Автор: Аркабаев Н.К., Бабаназар Уулу Д., Арапбаев Б.М.

Журнал: Бюллетень науки и практики @bulletennauki

Рубрика: Естественные науки

Статья в выпуске: 8 т.11, 2025 года.

Бесплатный доступ

Рассматривается процесс проектирования и разработки программного комплекса для решения задач линейного программирования на платформе Visual Studio C#. Описан выбор и обоснование алгоритмов решения оптимизационных задач, включая симплекс-метод, метод искусственного базиса, двойственный симплекс-метод, метод потенциалов для транспортных задач и графический метод. Исследуется архитектура программного обеспечения, реализованная с использованием паттерна MVVM (Model-View-ViewModel), что обеспечивает модульность, низкую связность компонентов и высокую степень повторного использования кода. Особое внимание уделено эффективной реализации алгоритмов, использованию механизма внедрения зависимостей и системе плагинов для расширения функциональности. Представлены ключевые аспекты программной реализации, включая работу с матрицами и векторами, и предложена оптимизация производительности с помощью параллельных вычислений. Результаты демонстрируют эффективность разработанного программного комплекса для решения широкого спектра задач линейного программирования как в образовательных, так и в практических целях.

Еще

Линейное программирование, симплекс-метод, оптимизация, алгоритмы, программный комплекс, программная архитектура, параллельные вычисления

Короткий адрес: https://sciup.org/14133512

IDR: 14133512   |   УДК: 519.6,   |   DOI: 10.33619/2414-2948/117/03

Текст научной статьи Реализация программного комплекса для решения задач линейного программирования на платформе Visual Studio C#

Бюллетень науки и практики / Bulletin of Science and Practice

Бюллетень науки и практики / Bulletin of Science and Practice

Линейное программирование представляет собой один из фундаментальных разделов математического программирования, который широко применяется для решения оптимизационных задач в различных областях человеческой деятельности. От управления ресурсами и планирования производства до логистики и финансового анализа – везде, где требуется принимать оптимальные решения в условиях ограниченных ресурсов, методы линейного программирования демонстрируют свою эффективность.

В современных условиях решение практических задач оптимизации невозможно представить без использования специализированного программного обеспечения. Возрастающая сложность бизнес-процессов, увеличение объемов, обрабатываемых данных и потребность в быстром принятии решений создают запрос на разработку эффективных программных инструментов для решения задач линейного программирования [1-3].

Платформа Visual Studio C# предоставляет богатые возможности для разработки эффективных алгоритмов и создания удобных пользовательских интерфейсов. Объектноориентированная парадигма программирования, реализованная в C#, хорошо подходит для модульной реализации алгоритмов линейного программирования, облегчая последующее расширение функциональности разрабатываемого программного продукта [4-8].

Данное исследование посвящено разработке программного комплекса для решения задач линейного программирования на платформе Visual Studio C#. Цель работы состоит в создании гибкого, расширяемого и эффективного инструмента, который будет полезен как для образовательных целей, так и для решения практических задач оптимизации.

Разработка программного комплекса для решения задач линейного программирования требует решения нескольких взаимосвязанных задач. Во-первых, необходимо определить набор алгоритмов, которые будут реализованы в комплексе, исходя из их эффективности, применимости к различным классам задач и образовательной ценности. Во-вторых, требуется спроектировать архитектуру программного обеспечения, которая обеспечит модульность, расширяемость и удобство использования. В-третьих, необходимо реализовать выбранные алгоритмы на платформе Visual Studio C#, обеспечивая их эффективность, надежность и точность [9, 10].

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

Методы

Выбор и обоснование методов решения задач линейного программирования. При разработке программного комплекса были выбраны несколько основных методов решения задач линейного программирования, которые впоследствии были реализованы на платформе Visual Studio C#. Приоритет отдавался методам, обладающим высокой эффективностью при решении практических задач и одновременно позволяющим наглядно продемонстрировать принципы линейного программирования. Симплекс-метод был выбран как один из фундаментальных алгоритмов в арсенале средств решения задач линейного программирования. Его преимущество заключается в способности эффективно работать с задачами большой размерности. Несмотря на потенциальную экспоненциальную сложность в худшем случае, на практике метод демонстрирует полиномиальное время выполнения для большинства задач. Применение симплекс-метода оправдано, когда требуется гарантированно найти оптимальное решение за конечное число шагов при условии его существования.

Метод искусственного базиса реализован как естественное дополнение к симплекс-методу, позволяющее эффективно находить начальное базисное решение для задач, в которых такое решение не очевидно. Этот подход особенно полезен при работе с системами ограничений, содержащими уравнения. Сущность метода заключается в расширении исходной задачи путем введения искусственных переменных, что позволяет сформировать начальное базисное решение и запустить симплекс-процедуру.

Двойственный симплекс-метод был включен в комплекс как альтернативный подход, который вместо непосредственного поиска оптимального решения прямой задачи работает с двойственной задачей. В некоторых случаях это может существенно сократить вычислительные затраты. Метод особенно эффективен при необходимости проведения анализа чувствительности решения к изменению параметров модели.

Метод потенциалов для решения транспортной задачи был выбран как специализированный алгоритм, оптимизированный для определенного класса задач линейного программирования. Транспортные задачи широко распространены в логистике, планировании производства и распределении ресурсов, что делает этот метод востребованным для практических приложений. По сравнению с общим симплекс-методом, метод потенциалов обладает более низкой вычислительной сложностью при решении задач соответствующего класса.

Графический метод включен в программный комплекс для решения задач линейного программирования с двумя переменными. Несмотря на ограниченность применения, этот метод обладает высокой наглядностью и позволяет интуитивно понять геометрическую интерпретацию задач линейного программирования, что важно с образовательной точки зрения. Визуализация процесса поиска оптимального решения способствует более глубокому пониманию принципов линейного программирования [11-15].

Проектирование архитектуры программного комплекса. Проектирование архитектуры программного комплекса осуществлялось с учетом современных принципов разработки программного обеспечения. Основными критериями при выборе архитектурного решения стали модульность, расширяемость, низкая связность компонентов и высокая степень повторного использования кода. В качестве базовой архитектурной модели был выбран паттерн MVVM (Model-View-ViewModel), который хорошо подходит для разработки приложений с графическим интерфейсом пользователя на платформе .NET. Данный паттерн обеспечивает четкое разделение между бизнес-логикой, представлением данных и пользовательским интерфейсом, что упрощает разработку и сопровождение программного комплекса.

Компонент Model включает классы, представляющие математическую модель задачи линейного программирования, а также алгоритмы их решения. Каждый метод решения реализован в виде отдельного класса, что обеспечивает инкапсуляцию логики алгоритма и возможность его независимого тестирования. Благодаря использованию интерфейсов и абстрактных классов удалось добиться высокой степени полиморфизма, что позволяет легко добавлять новые алгоритмы без изменения существующего кода. Компонент ViewModel служит связующим звеном между моделью и представлением. Он преобразует данные из модели в формат, удобный для отображения в пользовательском интерфейсе, и обрабатывает команды, поступающие от пользователя. В рамках разработанного программного комплекса для каждого типа задач линейного программирования был создан отдельный класс ViewModel, отвечающий за взаимодействие с соответствующим компонентом модели.

Компонент View отвечает за отображение данных и взаимодействие с пользователем. Для реализации пользовательского интерфейса использовалась технология WPF (Windows Presentation Foundation), которая обеспечивает богатые возможности для создания интерактивных и визуально привлекательных интерфейсов. Особое внимание было уделено разработке компонентов для визуализации результатов работы алгоритмов, таких как графики в двумерном пространстве для наглядного представления ограничений и целевой функции.

Важным аспектом архитектуры разработанного программного комплекса является использование механизма внедрения зависимостей (Dependency Injection), что позволяет уменьшить связность компонентов и упростить тестирование. Для реализации этого механизма был использован контейнер внедрения зависимостей Autofac, который обеспечивает гибкую настройку внедрения зависимостей и упрощает конфигурирование компонентов системы. Для обеспечения расширяемости программного комплекса была реализована система плагинов, позволяющая легко добавлять новые алгоритмы решения задач линейного программирования без изменения основного кода приложения. Каждый плагин реализует стандартный интерфейс IOptimizationAlgorithm, что обеспечивает возможность его динамической загрузки и использования в рамках единого пользовательского интерфейса. Также в архитектуре программного комплекса предусмотрена возможность сохранения и загрузки задач линейного программирования из файлов различных форматов, таких как XML, JSON и CSV. Это обеспечивает возможность интеграции с другими системами и повышает удобство использования программного комплекса в реальных условиях [16].

Практические примеры

Реализация алгоритмов линейного программирования на платформе Visual Studio C#. Реализация алгоритмов линейного программирования на платформе Visual Studio C# осуществлялась с учетом особенностей выбранной архитектуры программного комплекса и требований к производительности и надежности алгоритмов. Рассмотрим ключевые аспекты реализации каждого из выбранных методов. Для обеспечения эффективной работы с матрицами и векторами, которые являются основными структурами данных в алгоритмах линейного программирования, была разработана специализированная библиотека линейной алгебры. Данная библиотека предоставляет набор классов для представления и манипулирования матрицами и векторами, а также набор операций над ними, таких как сложение, умножение, транспонирование, нахождение обратной матрицы и т.д. Библиотека оптимизирована для работы с разреженными матрицами, что позволяет эффективно решать задачи большой размерности.

Симплекс-метод был реализован в виде класса SimplexSolver, который наследует от абстрактного класса LinearProgrammingSolver. Базовый алгоритм симплекс-метода представляет собой итеративный процесс перехода от одного базисного решения к другому с улучшением значения целевой функции на каждом шаге. Особое внимание было уделено обработке вырожденных случаев, когда возникает циклическое зацикливание алгоритма. Для предотвращения зацикливания был реализован метод возмущений, который заключается в небольшом изменении правых частей ограничений для выхода из вырожденного состояния.

Фрагмент кода реализации класса SimplexSolver:

public class SimplexSolver : LinearProgrammingSolver

{ private Matrix A; // Матрица ограничений private Vector b; // Вектор правых частей ограничений private Vector c; // Вектор коэффициентов целевой функции private bool isMaximization; // Флаг, указывающий на максимизацию целевой функции public SimplexSolver(Matrix a, Vector b, Vector c, bool isMaximization) { this.A = a;

this.b = b;

this.c = isMaximization ? c : c.Multiply(-1);

this.isMaximization = isMaximization;

} public override SolutionResult Solve()

{

// Проверка на наличие начального базисного решения if (!HasInitialBasisSolution())

{

// Если начальное базисное решение отсутствует, используем метод искусственного базиса

ArtificialBasisSolver artificialBasisSolver = new ArtificialBasisSolver(A, b, c, isMaximization);

{ return initialSolution; // Если не удалось найти начальное базисное решение, возвращаем результат

}

// Иначе используем найденное начальное базисное решение для дальнейшего решения симплекс-методом

InitializeFromSolution(initialSolution);

}

// Выполняем итерации симплекс-метода while (true)

{

// Находим индекс переменной, которая войдет в базис int enteringIndex = FindEnteringVariableIndex();

if (enteringIndex == -1)

{

// Если такой переменной нет, значит мы достигли оптимального решения return CreateOptimalSolutionResult();

}

// Находим индекс переменной, которая выйдет из базиса int leavingIndex = FindLeavingVariableIndex(enteringIndex);

if (leavingIndex == -1)

{

// Если такой переменной нет, значит целевая функция не ограничена return CreateUnboundedSolutionResult();

}

// Выполняем поворот

PerformPivot(enteringIndex, leavingIndex);

}

}

// Остальные методы класса...

}

Метод искусственного базиса был реализован в виде отдельного класса ArtificialBasisSolver, который также наследует от LinearProgrammingSolver. Данный метод используется как вспомогательный для симплекс-метода в случаях, когда отсутствует начальное базисное решение. Реализация метода искусственного базиса включает расширение исходной задачи путем введения искусственных переменных и решение расширенной задачи с помощью симплекс-метода. Особое внимание было уделено корректному удалению искусственных переменных после нахождения начального базисного решения и возврату к исходной задаче.

Двойственный симплекс-метод реализован в классе DualSimplexSolver. Этот метод основан на работе с двойственной задачей линейного программирования. В реализации особое внимание было уделено корректному преобразованию исходной задачи в двойственную и обратно. Двойственный симплекс-метод особенно эффективен при решении задач, для которых известно оптимальное решение, но требуется внести изменения в ограничения, что часто встречается при анализе чувствительности.

Метод потенциалов для решения транспортной задачи реализован в классе TransportationSolver. Реализация включает алгоритм поиска начального базисного решения методом северо-западного угла или методом минимального элемента, а также итеративный процесс улучшения решения с использованием потенциалов. Особое внимание было уделено обработке вырожденных случаев, когда количество базисных переменных меньше необходимого.

Графический метод для задач с двумя переменными реализован в классе GraphicalMethodSolver. Данный метод основан на построении многоугольника допустимых решений и последующем поиске вершины, в которой достигается оптимальное значение целевой функции. Для визуализации использовалась библиотека OxyPlot, которая предоставляет богатые возможности для построения графиков в приложениях WPF.

Для обеспечения надежности и устойчивости алгоритмов была реализована система обработки ошибок и исключительных ситуаций. Каждый алгоритм возвращает объект типа

SolutionResult, который содержит информацию о статусе решения (оптимальное, неограниченное, несовместное и т.д.), значение целевой функции, значения переменных и другую полезную информацию. Это позволяет пользователю получить полную информацию о результате работы алгоритма и принять решение о дальнейших действиях. Также был реализован механизм логирования процесса решения, который позволяет отслеживать каждый шаг работы алгоритма и анализировать его поведение. Это особенно полезно для образовательных целей и для отладки алгоритмов. Для повышения производительности при решении задач большой размерности была реализована параллельная версия симплекс-метода, использующая возможности многоядерных процессоров. Параллелизация выполнялась на уровне операций с матрицами и векторами, что позволило значительно ускорить работу алгоритма на задачах большой размерности [17].

Сравнение методов

Для оценки эффективности реализованных методов было проведено сравнительное тестирование на наборе тестовых задач различной размерности и сложности. Тестирование проводилось на компьютере с процессором Intel Core i7, 16 ГБ оперативной памяти и операционной системой Windows 11.

В качестве критериев сравнения использовались время решения задачи, объем используемой памяти и точность полученного решения. Результаты тестирования показали, что для задач малой размерности (до 10 переменных и 20 ограничений) все реализованные методы демонстрируют сопоставимую производительность. Однако для задач большой размерности (более 100 переменных и 200 ограничений) симплекс-метод и его модификации показывают существенное преимущество по сравнению с другими методами.

Особый интерес представляет сравнение параллельной и последовательной версий симплекс-метода. Тестирование показало, что для задач малой размерности параллельная версия может быть даже медленнее последовательной из-за накладных расходов на создание и управление потоками. Однако для задач большой размерности параллельная версия демонстрирует значительное ускорение, достигающее 3-4 раз на компьютере с 8 физическими ядрами.

Метод потенциалов для решения транспортной задачи показал высокую эффективность на специализированных задачах транспортного типа, значительно превосходя симплекс-метод по скорости работы. Это объясняется тем, что метод потенциалов учитывает специфическую структуру транспортной задачи и использует более эффективные алгоритмы для ее решения.

Графический метод, как и ожидалось, применим только к задачам с двумя переменными, но при этом обеспечивает наглядную визуализацию процесса решения, что делает его ценным инструментом для образовательных целей.

Результаты

Разработанный программный комплекс для решения задач линейного программирования на платформе Visual Studio C# успешно реализует все поставленные задачи и отвечает заявленным требованиям. Программный комплекс обеспечивает возможность решения широкого спектра задач линейного программирования различной размерности и сложности, предоставляя удобный интерфейс для ввода исходных данных, визуализации процесса решения и анализа результатов.

Комплекс имеет модульную архитектуру, основанную на паттерне MVVM, что обеспечивает высокую степень расширяемости и гибкости. Система плагинов позволяет легко добавлять новые алгоритмы решения задач линейного программирования без изменения основного кода приложения. Механизм внедрения зависимостей обеспечивает низкую связность компонентов и упрощает тестирование.

Реализованные алгоритмы (симплекс-метод, метод искусственного базиса, двойственный симплекс-метод, метод потенциалов и графический метод) демонстрируют высокую эффективность и надежность при решении задач соответствующих классов. Параллельная версия симплекс-метода обеспечивает значительное ускорение на многоядерных процессорах при решении задач большой размерности.

Пользовательский интерфейс, реализованный с использованием технологии WPF, обеспечивает удобство работы с программным комплексом и наглядность представления результатов. Визуализация процесса решения, особенно для графического метода, способствует лучшему пониманию принципов линейного программирования.

Возможность сохранения и загрузки задач из файлов различных форматов (XML, JSON, CSV) обеспечивает гибкость использования программного комплекса и возможность интеграции с другими системами.

Тестирование программного комплекса на наборе тестовых задач показало его высокую эффективность, надежность и точность. Особенно стоит отметить высокую производительность при решении задач большой размерности благодаря оптимизированной библиотеке линейной алгебры и использованию параллельных вычислений.

Заключение

В рамках данного исследования был разработан программный комплекс для решения задач линейного программирования на платформе Visual Studio C#. Комплекс реализует несколько классических методов решения задач линейного программирования: симплекс-метод, метод искусственного базиса, двойственный симплекс-метод, метод потенциалов для транспортных задач и графический метод для задач с двумя переменными. Программный комплекс имеет модульную архитектуру, основанную на паттерне MVVM, что обеспечивает высокую степень расширяемости и гибкости. Система плагинов позволяет легко добавлять новые алгоритмы без изменения основного кода приложения. Механизм внедрения зависимостей обеспечивает низкую связность компонентов и упрощает тестирование. Реализованные алгоритмы демонстрируют высокую эффективность и надежность при решении задач соответствующих классов. Параллельная версия симплекс-метода обеспечивает значительное ускорение на многоядерных процессорах при решении задач большой размерности. Тестирование программного комплекса показало его высокую эффективность, надежность и точность. Особенно стоит отметить высокую производительность при решении задач большой размерности благодаря оптимизированной библиотеке линейной алгебры и использованию параллельных вычислений. Разработанный программный комплекс может быть использован как в образовательных целях для изучения методов линейного программирования, так и для решения практических задач оптимизации в различных областях: логистике, планировании производства, распределении ресурсов, финансовом анализе и других. В будущем планируется расширение функциональности программного комплекса за счет добавления новых методов решения задач линейного программирования, а также интеграции с другими системами и платформами. Также представляется перспективным расширение возможностей визуализации процесса решения и результатов, что особенно важно для образовательных целей.

Бюллетень науки и практики / Bulletin of Science and Practice Т. 11. №8 2025