2009-11-07 3 views
1

Я хочу решить систему из n линейных уравнений, содержащих n переменных с использованием генетического алгоритма.Как решить линейные уравнения с использованием генетического алгоритма?

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

Предположим, что мы должны решить

x + 2y = 1 
2x + 8y = 3 

Ответ будет х = 1/2 и у = 1/4.

Как мы можем моделировать проблему?

Обновление: посмотрите, можете ли вы расшифровать что-либо из бумаги http://www.masaumnet.com/archives/mjbas/volume1/issue2/mjbas010205.pdf.

+0

Вы можете быть более конкретным *? – Graviton

+0

Это домашнее задание? Почему бы вам не использовать гораздо лучшие стандартные алгоритмы? – starblue

+0

да это домашнее задание. Я выбрал это как проект курса для ИИ. не было много времени для принятия решения. теперь я должен закодировать его в течение недели. поэтому у меня недостаточно времени для исследования. –

ответ

1

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

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

5

Вы просто этого не делаете. Существует множество различных методов, которые можно применять для решения линейных систем. Но «генетические алгоритмы» - это не то, что приходит на ум. Вы должны использовать генетические алгоритмы для решения комбинаторных задач (выбор одного элемента из набора конечных).

Обычно решение линейных систем с помощью факторизации (QR, LU) или итерационные алгоритмы (Гаусс-Зейделя, CG, ...)

+0

Возможно, это вопрос домашней работы, поэтому он должен это сделать. – Graviton

+0

Правильно, я выбрал это как проект курса для ИИ. у меня не было много времени, чтобы решить, и теперь у меня мало времени на код. это связанная статья www.masaumnet.com/archives/mjbas/volume1/.../mjbas010205.pdf , но это не объясняет детали. –

+0

Действительно ли это невозможно? –

6

Ваш хромосома может быть число п с плавающей точкой (двойные), или вы могли бы переосмысливать их в виде битовых строк с помощью объединения:

const int n = 100; 

union Chromosome { 
    double val[n]; 
    unsigned char bits[n * sizeof(double)]; 
}; 

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

Удачи вам!

+0

Да, но представление с плавающей запятой должно быть учтено. выполнение кроссовера случайных битов принесет пользу? –

+0

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

+0

Вы можете сделать кроссовер (и мутацию), как хотите. Просто пересечь числа с плавающей запятой ... имеют мутации, которые просто рандомизируют поплавок ... – Inverse

1

Вам нужно будет подумать об использовании генетического алгоритма с реальным кодированием, а не к генетическому алгоритму с двоичным кодированием, как это предлагается в документе, о котором вы говорили. Фактически, если вы используете генетический алгоритм с двоичным кодом, вы не сможете найти решение уравнений, если ваши «x», «y» могут принимать отрицательные значения.

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

Вы можете использовать реализацию RGA от http://www.iitk.ac.in/kangal/codes.shtml.

Смежные вопросы