12 Commits
lab_8 ... main

Author SHA1 Message Date
17d76352fa Merge pull request 'Лабораторная работа №11. Шабунов Олег Андреевич, ПИбд-32' (#11) from lab_11 into main
Reviewed-on: #11
2025-05-24 10:29:35 +04:00
7793d647f5 Merge pull request 'Лабораторная работа №12. Шабунов Олег Андреевич, ПИбд-32' (#12) from lab_12 into main
Reviewed-on: #12
2025-05-24 10:29:28 +04:00
989604c2ad Поймал Змей Горыныч англичанина, француза и цыгана...
Поймал Змей Горыныч англичанина, француза и цыгана. И говорит:
— Кто расскажет мне такую историю, что все три головы скажут "Да ну нахуй" того отпущу, а если хоть одна голова скажет "Бывает", того съем!
Англичанин:
— Один английский джентельмен купил машину, и только он выехал на ней из магазина, сразу же разбил в дребезги.
Две головы: - "Да ну нахуй", третья: - "Фигня, бывает". Съели!
Француз:
- Один французский джентльмен решил жениться, и прямо в церкви его невеста изменила ему со свидетелем.
Две головы: - "Да ну нахуй", третья: - "Бывает". Съели!
Цыган не знает что бы соврать, думает: "Начну, а там видно будет":
— Один цыганский джентельмен...
Все три головы: - "Да ну нахуй!"
2025-05-24 02:01:04 +04:00
0be7e6ca28 Собрался чукча на охоту. Надел лыжи, взял ружье...
Собрался чукча на охоту. Надел лыжи, взял ружье и ушел в тундру. А в тундре пурга, темно, холодно. Устал чукча, какая тут уже охота! Бредет спотыкаясь....вдруг свет, грохот, шум, У-У-У-У-У вылетает на всем ходу поезд. Удар - чукча отлетает на три метра, с трудом поднимается и чуть живой тащится домой.
Пришел. Сел в кресло весь побитый, уставший, отдыхает. И тут чайник на кухне У-У-У-У. Чукча влетает на кухню и лопатой по чайнику:
— Сука, вас надо еще детёнышами убивать!!
2025-05-24 01:19:27 +04:00
22dee5cc15 Шахид приходит на вручение Оскара...
Шахид приходит на вручение Оскара.
Его спрашивают:
— Что Вы тут делаете? Вы актер?
Он отвечает:
— Я наминирован
2025-05-23 14:23:33 +04:00
8f9919ff08 Merge pull request 'Лабораторная работа №10. Шабунов Олег Андреевич, ПИбд-32' (#9) from lab_10 into main
Reviewed-on: #9
2025-05-23 14:17:08 +04:00
88297a575b Merge pull request 'Лабораторная работа №9. Шабунов Олег Андреевич, ПИбд-32' (#8) from lab_9 into main
Reviewed-on: #8
2025-05-23 14:16:57 +04:00
e5d5524046 Подходит бабка к зумеру на улице...
Подходит бабка к зумеру на улице:
- Скажи сынок, какой троллейбус едет на улицу Горького?
- Во-первых, не сынок, а чел. Во-вторых, не троллейбус, а тралик. В третьих, не едет, а флексит.
- Спасибо, сынок.
Идёт она дальше, видит полицейского.
- Чел, какой тралик на Горького флексит?
- Хайпуешь, плесень?
2025-05-23 01:59:22 +04:00
a875ff8f87 Мужик показывает квартиру своему другу...
Мужик показывает квартиру своему другу.
Вдруг тот видит на стене большой медный таз.
— А это что еще такое?
— Говорящие часы!
— Это как?
Мужик со всей силой бьет по тазу.
Из-за стены раздается голос:
— Два часа ночи, еб твою мать!
2025-05-23 00:13:15 +04:00
922dd601e8 Merge pull request 'Лабораторная работа №8. Шабунов Олег Андреевич, ПИбд-32' (#7) from lab_8 into main
Reviewed-on: #7
2025-05-17 12:00:13 +04:00
e0c9203e53 Merge pull request 'Лабораторная работа №7. Шабунов Олег Андреевич, ПИбд-32' (#6) from lab_7 into main
Reviewed-on: #6
2025-05-17 12:00:03 +04:00
138cd76656 Вы никогда не задумывались, почему в Зверополисе есть спрей от...
Вы никогда не задумывались, почему в Зверополисе есть спрей от лис? Они же все там все "равны". Это как если б в Москве был спрей от
2025-05-16 20:41:22 +04:00
12 changed files with 334944 additions and 0 deletions

611
lab_10/lab10.ipynb Normal file
View File

@@ -0,0 +1,611 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "3cd1445d",
"metadata": {},
"source": [
"# Лабораторная работа №10. Задача оптимизации. Эволюционные алгоритмы.\n",
"\n",
"## Определение задачи об оптимизации\n",
"\n",
"**Задача о рюкзаке (Knapsack Problem)**:\n",
"Имеется набор предметов, каждый с весом и стоимостью. Цель — выбрать подмножество предметов, чтобы **максимизировать суммарную стоимость**, при этом суммарный вес не превышал заданной вместимости рюкзака.\n",
"\n",
"## Датасет с вариантами решений\n",
"\n",
"[**Ссылка**](https://www.kaggle.com/datasets/warcoder/knapsack-problem)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "02d32865",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Weights</th>\n",
" <th>Prices</th>\n",
" <th>Capacity</th>\n",
" <th>Best picks</th>\n",
" <th>Best price</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>[46 40 42 38 10]</td>\n",
" <td>[12 19 19 15 8]</td>\n",
" <td>40</td>\n",
" <td>[0. 1. 0. 0. 0.]</td>\n",
" <td>19.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>[11 31 4 6 7]</td>\n",
" <td>[ 2 8 18 16 3]</td>\n",
" <td>64</td>\n",
" <td>[1. 1. 1. 1. 1.]</td>\n",
" <td>47.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>[32 49 27 37 24]</td>\n",
" <td>[19 16 16 4 1]</td>\n",
" <td>87</td>\n",
" <td>[1. 0. 1. 0. 1.]</td>\n",
" <td>36.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>[20 35 22 23 16]</td>\n",
" <td>[19 17 19 9 1]</td>\n",
" <td>21</td>\n",
" <td>[1. 0. 0. 0. 0.]</td>\n",
" <td>19.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>[ 7 12 19 13 20]</td>\n",
" <td>[10 11 18 15 5]</td>\n",
" <td>50</td>\n",
" <td>[0. 1. 1. 1. 0.]</td>\n",
" <td>44.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Weights Prices Capacity Best picks Best price\n",
"0 [46 40 42 38 10] [12 19 19 15 8] 40 [0. 1. 0. 0. 0.] 19.0\n",
"1 [11 31 4 6 7] [ 2 8 18 16 3] 64 [1. 1. 1. 1. 1.] 47.0\n",
"2 [32 49 27 37 24] [19 16 16 4 1] 87 [1. 0. 1. 0. 1.] 36.0\n",
"3 [20 35 22 23 16] [19 17 19 9 1] 21 [1. 0. 0. 0. 0.] 19.0\n",
"4 [ 7 12 19 13 20] [10 11 18 15 5] 50 [0. 1. 1. 1. 0.] 44.0"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"\n",
"df = pd.read_csv(os.path.join('.', 'static', 'csv', 'knapsack_5_items.csv'))\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "b98390ab",
"metadata": {},
"source": [
"## Структура хромосомы и тип данных гена\n",
"\n",
"- **Хромосома**: бинарный вектор длины N (кол-во доступных предметов)\n",
"- Ген: 0 или 1 — включен ли предмет в рюкзак\n",
"\n",
"## Генерация начальной популяции"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "104f6440",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[1, 0, 0, 1, 1],\n",
" [1, 0, 0, 1, 1],\n",
" [1, 0, 0, 1, 1],\n",
" [1, 1, 0, 1, 1],\n",
" [0, 1, 0, 1, 0],\n",
" [0, 0, 1, 1, 0],\n",
" [0, 0, 0, 1, 1],\n",
" [0, 1, 0, 0, 1],\n",
" [0, 1, 0, 1, 1],\n",
" [1, 0, 1, 0, 0],\n",
" [1, 0, 1, 0, 1],\n",
" [1, 1, 1, 0, 0],\n",
" [0, 1, 1, 1, 1],\n",
" [0, 1, 0, 0, 1],\n",
" [1, 1, 0, 0, 1],\n",
" [0, 0, 0, 0, 1],\n",
" [0, 0, 0, 1, 1],\n",
" [0, 1, 0, 0, 0],\n",
" [0, 1, 1, 0, 1],\n",
" [1, 1, 0, 0, 0]]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import random\n",
"\n",
"def create_individual(elements_num): \n",
" return [random.randint(0, 1) for _ in range(elements_num)]\n",
"\n",
"def create_population(population_size, elements_num): \n",
" return [create_individual(elements_num) for _ in range(population_size)]\n",
"\n",
"POPULATION_COUNT = 20\n",
"GENE_SIZE = 5\n",
"\n",
"create_population(POPULATION_COUNT, GENE_SIZE)"
]
},
{
"cell_type": "markdown",
"id": "69f3e8ca",
"metadata": {},
"source": [
"## Фитнес функция"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "7d9fe8c3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"36"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def calculate_fitness(individual, weights, prices, capacity):\n",
" total_value = total_weight = 0\n",
" for i in range(len(individual)):\n",
" if individual[i] == 1:\n",
" total_value += prices[i]\n",
" total_weight += weights[i]\n",
" if (total_weight <= capacity):\n",
" return total_value\n",
" return 0\n",
"\n",
"calculate_fitness([1, 0, 1, 0, 1], [32, 49, 27, 37, 24], [19, 16, 16, 4, 1], 87)"
]
},
{
"cell_type": "markdown",
"id": "c937fe2c",
"metadata": {},
"source": [
"## Оператор кроссинговера\n",
"\n",
"В данном случае используется одноточечный метод:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "c55e4513",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([0, 1, 1, 0, 0], [1, 0, 1, 1, 0])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def crossover(item1, item2):\n",
" point = random.randint(1, len(item1) - 1)\n",
" return (item1[:point] + item2[point:], item2[:point] + item1[point:])\n",
"\n",
"crossover([0, 1, 1, 1, 0], [1, 0, 1, 0, 0])"
]
},
{
"cell_type": "markdown",
"id": "8f5f108e",
"metadata": {},
"source": [
"## Операторы мутации\n",
"\n",
"1. **Битовая мутация** - каждый ген с небольшой вероятностью меняется на противоположный.\n",
"2. **Инверсия подотрезка** - выбирается случайный подотрезок, и его гены инвертируются (переворачиваются местами)."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "449075d4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Исходная: [1, 0, 1, 0, 1]\n",
"Битовая мутация: [1, 0, 1, 0, 1]\n",
"Инверсия: [1, 0, 1, 0, 1]\n"
]
}
],
"source": [
"def bit_flip_mutation(individual, mutation_rate=0.1):\n",
" mutated = individual.copy()\n",
" for i in range(len(mutated)):\n",
" if random.random() < mutation_rate:\n",
" mutated[i] = 1 - mutated[i]\n",
" return mutated\n",
"\n",
"def inversion_mutation(individual, mutation_rate=0.1):\n",
" mutated = individual.copy()\n",
" a, b = sorted(random.sample(range(len(mutated)), 2))\n",
" mutated[a:b + 1] = mutated[a:b + 1][::-1]\n",
" return mutated\n",
"\n",
"individual = [1, 0, 1, 0, 1]\n",
"\n",
"print(\"Исходная:\", individual)\n",
"print(\"Битовая мутация:\", bit_flip_mutation(individual, mutation_rate=0.3))\n",
"print(\"Инверсия:\", inversion_mutation(individual))"
]
},
{
"cell_type": "markdown",
"id": "468d80dd",
"metadata": {},
"source": [
"## Генетический алгоритм\n",
"\n",
"Самостоятельно реализуем алгоритм без применения PyGAD:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "600ed1cc",
"metadata": {},
"outputs": [],
"source": [
"def select_parents(population, weights, prices, capacity):\n",
" fitness_values = [calculate_fitness(ind, weights, prices, capacity) for ind in population]\n",
" total_fitness = sum(fitness_values)\n",
" \n",
" if total_fitness == 0:\n",
" return random.choice(population), random.choice(population)\n",
"\n",
" probabilities = [f / total_fitness for f in fitness_values]\n",
" return random.choices(population, weights=probabilities, k=2)\n",
"\n",
"\n",
"def genetic_algorithm(weights, prices, capacity, population_size=100, num_generations=10, mutation_rate=0.1, mutation_strategy=bit_flip_mutation):\n",
" elements_num = len(weights)\n",
" population = create_population(population_size, elements_num)\n",
"\n",
" for _ in range(num_generations):\n",
" new_population = []\n",
" for _ in range(population_size // 2):\n",
" p1, p2 = select_parents(population, weights, prices, capacity)\n",
" c1, c2 = crossover(p1, p2)\n",
" c1 = mutation_strategy(c1, mutation_rate)\n",
" c2 = mutation_strategy(c2, mutation_rate)\n",
" new_population.extend([c1, c2])\n",
" population = new_population\n",
"\n",
" best = max(population, key=lambda ind: calculate_fitness(ind, weights, prices, capacity))\n",
" best_value = calculate_fitness(best, weights, prices, capacity)\n",
" return best, best_value"
]
},
{
"cell_type": "markdown",
"id": "76254693",
"metadata": {},
"source": [
"## Сравнение с реальными данными\n",
"\n",
"Применим получившийся генетический алгоритм к набору данных и сравним реальные значения с полученными при помощи алгоритма:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "772643b1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Weights</th>\n",
" <th>Prices</th>\n",
" <th>Capacity</th>\n",
" <th>Best picks</th>\n",
" <th>Best price</th>\n",
" <th>algorithmPicks</th>\n",
" <th>algorithmPrice</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>[46 40 42 38 10]</td>\n",
" <td>[12 19 19 15 8]</td>\n",
" <td>40</td>\n",
" <td>[0. 1. 0. 0. 0.]</td>\n",
" <td>19.0</td>\n",
" <td>[0, 1, 0, 0, 0]</td>\n",
" <td>19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>[11 31 4 6 7]</td>\n",
" <td>[ 2 8 18 16 3]</td>\n",
" <td>64</td>\n",
" <td>[1. 1. 1. 1. 1.]</td>\n",
" <td>47.0</td>\n",
" <td>[1, 1, 1, 1, 1]</td>\n",
" <td>47</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>[32 49 27 37 24]</td>\n",
" <td>[19 16 16 4 1]</td>\n",
" <td>87</td>\n",
" <td>[1. 0. 1. 0. 1.]</td>\n",
" <td>36.0</td>\n",
" <td>[1, 0, 1, 0, 1]</td>\n",
" <td>36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>[20 35 22 23 16]</td>\n",
" <td>[19 17 19 9 1]</td>\n",
" <td>21</td>\n",
" <td>[1. 0. 0. 0. 0.]</td>\n",
" <td>19.0</td>\n",
" <td>[1, 0, 0, 0, 0]</td>\n",
" <td>19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>[ 7 12 19 13 20]</td>\n",
" <td>[10 11 18 15 5]</td>\n",
" <td>50</td>\n",
" <td>[0. 1. 1. 1. 0.]</td>\n",
" <td>44.0</td>\n",
" <td>[0, 1, 1, 1, 0]</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9995</th>\n",
" <td>[18 12 11 49 32]</td>\n",
" <td>[12 3 17 19 7]</td>\n",
" <td>41</td>\n",
" <td>[1. 1. 1. 0. 0.]</td>\n",
" <td>32.0</td>\n",
" <td>[1, 1, 1, 0, 0]</td>\n",
" <td>32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9996</th>\n",
" <td>[20 2 24 7 7]</td>\n",
" <td>[17 12 4 3 8]</td>\n",
" <td>17</td>\n",
" <td>[0. 1. 0. 1. 1.]</td>\n",
" <td>23.0</td>\n",
" <td>[0, 1, 0, 1, 1]</td>\n",
" <td>23</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9997</th>\n",
" <td>[43 43 5 15 23]</td>\n",
" <td>[15 5 7 2 7]</td>\n",
" <td>62</td>\n",
" <td>[1. 0. 1. 0. 0.]</td>\n",
" <td>22.0</td>\n",
" <td>[1, 0, 1, 0, 0]</td>\n",
" <td>22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9998</th>\n",
" <td>[49 9 15 21 39]</td>\n",
" <td>[11 15 3 12 19]</td>\n",
" <td>65</td>\n",
" <td>[0. 1. 1. 0. 1.]</td>\n",
" <td>37.0</td>\n",
" <td>[0, 1, 1, 0, 1]</td>\n",
" <td>37</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9999</th>\n",
" <td>[25 36 42 19 39]</td>\n",
" <td>[15 12 7 18 12]</td>\n",
" <td>79</td>\n",
" <td>[1. 0. 0. 1. 0.]</td>\n",
" <td>33.0</td>\n",
" <td>[1, 0, 0, 1, 0]</td>\n",
" <td>33</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Weights Prices Capacity Best picks \\\n",
"0 [46 40 42 38 10] [12 19 19 15 8] 40 [0. 1. 0. 0. 0.] \n",
"1 [11 31 4 6 7] [ 2 8 18 16 3] 64 [1. 1. 1. 1. 1.] \n",
"2 [32 49 27 37 24] [19 16 16 4 1] 87 [1. 0. 1. 0. 1.] \n",
"3 [20 35 22 23 16] [19 17 19 9 1] 21 [1. 0. 0. 0. 0.] \n",
"4 [ 7 12 19 13 20] [10 11 18 15 5] 50 [0. 1. 1. 1. 0.] \n",
"9995 [18 12 11 49 32] [12 3 17 19 7] 41 [1. 1. 1. 0. 0.] \n",
"9996 [20 2 24 7 7] [17 12 4 3 8] 17 [0. 1. 0. 1. 1.] \n",
"9997 [43 43 5 15 23] [15 5 7 2 7] 62 [1. 0. 1. 0. 0.] \n",
"9998 [49 9 15 21 39] [11 15 3 12 19] 65 [0. 1. 1. 0. 1.] \n",
"9999 [25 36 42 19 39] [15 12 7 18 12] 79 [1. 0. 0. 1. 0.] \n",
"\n",
" Best price algorithmPicks algorithmPrice \n",
"0 19.0 [0, 1, 0, 0, 0] 19 \n",
"1 47.0 [1, 1, 1, 1, 1] 47 \n",
"2 36.0 [1, 0, 1, 0, 1] 36 \n",
"3 19.0 [1, 0, 0, 0, 0] 19 \n",
"4 44.0 [0, 1, 1, 1, 0] 44 \n",
"9995 32.0 [1, 1, 1, 0, 0] 32 \n",
"9996 23.0 [0, 1, 0, 1, 1] 23 \n",
"9997 22.0 [1, 0, 1, 0, 0] 22 \n",
"9998 37.0 [0, 1, 1, 0, 1] 37 \n",
"9999 33.0 [1, 0, 0, 1, 0] 33 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import re\n",
"import ast\n",
"\n",
"POPULATION_SIZE = 100\n",
"GENERATIONS_NUM = 10\n",
"MUTATION_RATE = 0.1\n",
"\n",
"picks = []\n",
"best_prices = []\n",
"\n",
"def fix_list_string(s):\n",
" # Удалить пробел сразу после [ и сразу перед ]\n",
" s = re.sub(r'\\[\\s*', '[', s)\n",
" s = re.sub(r'\\s*\\]', ']', s)\n",
" # Заменить все группы пробелов на запятую\n",
" s = re.sub(r'\\s+', ',', s)\n",
" return s\n",
"\n",
"for _, row in df.iterrows():\n",
" weights = ast.literal_eval(fix_list_string(row['Weights']))\n",
" prices = ast.literal_eval(fix_list_string(row['Prices']))\n",
" capacity = row['Capacity']\n",
"\n",
" best_individual, best_value = genetic_algorithm(\n",
" weights,\n",
" prices,\n",
" capacity,\n",
" POPULATION_SIZE,\n",
" GENERATIONS_NUM,\n",
" mutation_rate=0.1,\n",
" mutation_strategy=bit_flip_mutation\n",
" )\n",
" \n",
" picks.append(best_individual)\n",
" best_prices.append(best_value)\n",
"\n",
"df['algorithmPicks'] = picks\n",
"df['algorithmPrice'] = best_prices\n",
"\n",
"pd.concat([df.head(5), df.tail(5)])"
]
},
{
"cell_type": "markdown",
"id": "82f2e49d",
"metadata": {},
"source": [
"## Вывод\n",
"\n",
"Генетический алгоритм успешно справился с задачей рюкзаке. Для всех протестированных входных данных результат совпал с эталонными оптимальными решениями из датасета. Это подтверждает корректность реализации фитнес-функции, операторов кроссинговера и мутаций. Алгоритм продемонстрировал высокую сходимость и эффективность даже при небольшом количестве поколений."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "aimenv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

BIN
lab_10/requirements.txt Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

648
lab_11/lab11.ipynb Normal file

File diff suppressed because one or more lines are too long

BIN
lab_11/requirements.txt Normal file

Binary file not shown.

1967
lab_12/lab12.ipynb Normal file

File diff suppressed because one or more lines are too long

BIN
lab_12/requirements.txt Normal file

Binary file not shown.

1246
lab_7/lab7.ipynb Normal file

File diff suppressed because one or more lines are too long

BIN
lab_7/requirements.txt Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

675
lab_9/lab9.ipynb Normal file

File diff suppressed because one or more lines are too long

BIN
lab_9/requirements.txt Normal file

Binary file not shown.