Giter Site home page Giter Site logo

linearprogramming's Introduction

Библиотека алгоритмов решения задач линейного программирования

Обзор

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

Введение

В библиотеке реализованы следующие алгоритмы:

  • Задача о рюкзаке: Комбинаторная задача, где нужно максимизировать стоимость предметов в рюкзаке с ограниченной вместимостью.
  • Симплекс-метод: Алгоритм для решения задач линейного программирования.
  • Двухфазный симплекс-метод: Расширение симплекс-метода для задач с искусственными переменными.

Установка

Чтобы использовать библиотеку, клонируйте репозиторий:

git clone https://github.com/Kuznetsov-Artyom/LinearProgramming.git
cd LinearProgramming

Использование

Все алгоритмы находятся в библиотеке lp.hpp и объединены в пространство имён lp.
В main.cpp представлено использование всех алгоритмов на нескольких примерах.

  1. Симплекс-метод
    Для использования сиплекс-метода используется метод simplexMethodMax.
    Для вывода результата используется метод printResultMaxSimplexMethod.
auto ansOne = lp::simplexMethodMax({3, 2}, {{1, 1, 4}, {1, 3, 6}});
lp::printResultMaxSimplexMethod(ansOne);

// И другие примеры

Метод simplexMethodMax принимает следующие параметры:

  • std::vector<double> - вектор, содержащий коэффициенты при x в целевой функции.
  • std::vector<std::vector<double>> - вектор векторов, в котором содержатся коэффициенты перед x в ограничениях и сами ограничения.
  1. Двухфазный симплекс-метод
    Для использования сиплекс-метода используется метод simplexMethodMaxTwoPhaze.
    Для вывода результата используется тот же метод printResultMaxSimplexMethod.
auto ansOneTwoPhazeNotFound = lp::simplexMethodMaxTwoPhaze(
    {3, -4}, {{-2, 1, 10}, {1, 3, 12}, {3, -1, 7}},
    {lp::OpCompare::LESS_EQ, lp::OpCompare::MORE_EQ, lp::OpCompare::MORE_EQ});
lp::printResultMaxSimplexMethod(ansOneTwoPhazeNotFound);

// И другие примеры
  • std::vector<double> - вектор, содержащий коэффициенты при x в целевой функции.
  • std::vector<std::vector<double>> - вектор векторов, в котором содержаться коэффициенты перед x в ограничениях и сами ограничения.
  • std::vector<OpCompare> - вектор, содержащий информацию о знаках неравенства в ограничениях.
  1. Задача о рюкзаке Для решения задачи о рюкзаке используется метод fillBackpack().
    Для вывода результата используется метод printResultFillBackpack().
auto ansOneBackpack = lp::fillBackpack({4, 5, 3, 7, 6}, {5, 7, 4, 9, 8}, 16);
lp::printResultFillBackpack(ansOneBackpack);

// И другие примеры
  • std::vector<double> - вектор, содержащий веса объектов.\
  • std::vector<std::vector<double>> - вектор содержащий стоимости объектов.\
  • int - вместимость рюкзака.

Также в программе реализован генератор тестов для симплес-метода, для его вызова необходимо использовать метод testSimplexMethodMax.

lp::testSimplexMethodMax({ 6, 2, 2.5, 4 },
    { {5, 1, 0, 2, 1000}, {1, 0, 2, 1, 150}, {4, 2, 2, 1, 600} });
  • Параметры аналогичны параметрам стандартного симплес-метода.
    Генератор тестов прогоняет симплекс-метод для всех вариантов перестановок столбцов в симплекс таблице.

linearprogramming's People

Contributors

kuznetsov-artyom avatar gr0mila avatar catk1ller007 avatar

Watchers

 avatar

Forkers

catk1ller007

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.