Как найти экстремум нелинейной функции двух переменных с помощью генетического алгоритма? Здравствуйте!
Не могу написать программу. В голове каша не могу все систематизировать, нужен алгоритм написания кода. Я наверно думаю как сделать, вот: Создать динамический массив x и y, размер указывается пользователем, рандом 0 и 10 (требуется от 0 до 10)применить x и y к функции своей, значения функции отсортировать, произвести мутацию, плохих удалить Вывести результат
Я очень сомневаюсь в правильности этого алгоритма, нужна помощь. Моя функция z = sqrt(3 * x * x - 5 * y * y)
Есть наброски кода, но они не работают. Что делать? Если есть ссылки на готовую задачу или разборы, буду благодарен (просто долго бьюсь над решением).

21 Авг 2019 в 06:08
124 +1
0
Ответы
1

Прежде всего, для решения данной задачи с использованием генетического алгоритма, следует выполнить следующие шаги:

Определить функцию приспособленности (fitness function) на основе заданной нелинейной функции z = sqrt(3 x x - 5 y y). Функция приспособленности должна оценивать качество каждого индивида (набора значений x и y) в популяции.

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

Осуществить процесс эволюции, включающий в себя операции селекции, скрещивания и мутации. С помощью этих операций популяция будет эволюционировать в сторону нахождения экстремума функции.

Определить критерий останова алгоритма. Например, можно остановить алгоритм, когда достигнуто заданное количество поколений или когда достигнуто определенное значение функции приспособленности.

Ниже представлен примерный алгоритм на Python для решения задачи поиска экстремума нелинейной функции с использованием генетического алгоритма:

import random
import math
# Определение функции
def fitness_function(x, y):
return math.sqrt(3 * x * x - 5 * y * y)
# Создание начальной популяции
def create_population(population_size):
population = []
for _ in range(population_size):
x = random.uniform(0, 10)
y = random.uniform(0, 10)
population.append((x, y))
return population
# Осуществление процесса эволюции
def evolve(population):
sorted_population = sorted(population, key=lambda x: fitness_function(x[0], x[1]), reverse=True)
new_population = sorted_population[:len(population)//2] # Выбор лучших особей
while len(new_population) < len(population):
parent1, parent2 = random.choices(sorted_population[:len(population)//2], k=2) # Выбор двух случайных родителей
child = (random.uniform(min(parent1[0], parent2[0]), max(parent1[0], parent2[0]),
random.uniform(min(parent1[1], parent2[1]), max(parent1[1], parent2[1]))
if random.random() < 0.1: # Вероятность мутации
child = (random.uniform(0, 10), random.uniform(0, 10))
new_population.append(child)
return new_population
# Основной код
population_size = 100
generations = 1000
population = create_population(population_size)
for _ in range(generations):
population = evolve(population)
best_solution = max(population, key=lambda x: fitness_function(x[0], x[1]))
best_fitness = fitness_function(best_solution[0], best_solution[1])
print("Best solution:", best_solution)
print("Best fitness:", best_fitness)

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

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 622 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир