Code Monkey home page Code Monkey logo

knapsack-problem-ga's Introduction

Knapsack-problem-GA

Програма розв'язує задачу про ранець за допомогою генетинчого алгоритму. Knapsack image

Примітка:

  • з описом задачі можете ознайомитися тут;
  • з описом ГА для цієї задачі тут (ru).

Опис

Хромосома представляє собою бінарний рядок (список 0 і 1): 0 - річ не треба покласти в ранець, 1 - треба.

Приклад:

Нехай є 5 речей і хромосома має вигляд [0, 1, 1, 0, 1]. Це означає, що ми повинні покласти в ранець речі під номерами 2, 3, 5 і не покласти речі під номерами 1, 4.

У реалізації використовується турнірна селекція, схрещування в одній точці, мутація (під час мутації хромосома змінює кожен свій ген на ген з протилежним значенням; ймовірність мутації гена - 0.5%)

Ознайомитися з формулою, яка використовується для обчислення здоров'я хромосоми можете в файлі Knapsack.py.

Також об'єкт класу Knapsack збирає статистику про популяцію під час знаходження розв'зку. Статистика - список, що містить середнє арифметичне значення здоров'я кожної популяції. Цю статистику можна використати для побудови графіку еволюції.

Приклади вхідних данних, роз'язків та графіків:

Позначення: W - максимальна вага, N - кількість речей, Wi - вага і-ої речі, Pi - ціна і-ої речі, idx - список номерів речей, tw - вага речей, tp - ціна речей.

  1. Вхідні данні: W - 13, N - 5

    W1 = 3, P1 = 1

    W2 = 4, P2 = 6

    W3 = 5, P3 = 4

    W4 = 8, P4 = 7

    W5 = 9, P5 = 6

    Вихідні данні: idx = [2, 4], tw = 12, tp = 13.

    first plot

  2. Вхідні данні: W - 15, N - 5

    W1 = 6, P1 = 5

    W2 = 4, P2 = 3

    W3 = 3, P3 = 1

    W4 = 2, P4 = 3

    W5 = 5, P5 = 6

    Вихідні данні: idx = [1, 2, 5], tw = 15, tp = 14 або idx = [1, 4, 5], tw = 13, tp = 14.

    seconf plot

Структура проекту

  • Knapsack.py - містить реалізацію генетичного алгоритму для задачі про ранець.
  • Chromosome.py - містить клас, що моделює хромосому, котра вміє схрещуватися і мутувати.
  • Item.py - містить клас, що моделює річ, котру можна покласти в ранець (кожна річ має вагу і ціну).
  • SolutionInfo.py - містить клас, що зберігає інформацію про розв'язок: список обраних речей та їх індексів.
  • main.py - містить клієнтський код.

knapsack-problem-ga's People

Contributors

specialfor avatar

Stargazers

 avatar

Watchers

 avatar

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.