Комментарии 60
НЛО прилетело и опубликовало эту надпись здесь
2003 :)
0
Да ладно, это ж по-моему заказу :D habrahabr.ru/blogs/algorithm/100953/#comment_3125762
+2
видимо, это самый «простой» способ вывести Hello World! :)
+3
Назначаетесь сегодня капитаном!
+5
А представьте, кто-то сегодня решил освоить Си и загуглил «hello world» =)
+3
А как же версия на брэйнфаке?
0
в том-то и дело, что она короче :)
0
Вот, кстати, вывести с помощью ГА самый короткий код на Брейнфаке, который выводил бы «Hello, World!», было бы намного интереснее и поучительней.
+2
Много кода, мало текста. Если бы я не знал что такое «генетический алгоритм» я бы честно говоря не понял к чему все эти танцы с брутфорсом.
+5
интересно, что за текст образовала человеческая популяция?
0
Из поста понял 2 вещи:
1. генетический алгоритм — штука интетесная, но мутная, надо будет почитать;
2. все-таки за несколько лет работы с PHP стало непривычно и как-то неудобно смотреть на C.
1. генетический алгоритм — штука интетесная, но мутная, надо будет почитать;
2. все-таки за несколько лет работы с PHP стало непривычно и как-то неудобно смотреть на C.
-20
+2
— так то же прикольно.
+1
Мне всегда казалось что под «генетическим алгоритмом» скриваеться алгоритм поиска екстремума функции…
-5
Best: Idoit!wnsk_! (22)
Мне кажется, он пытается нам что-то сказать…
Мне кажется, он пытается нам что-то сказать…
+5
Мне вот капча периодически что-то сообщает, порой мне кажется, что она со мной пытается заговорить.
0
И еще автору:
Я бы описал основное применение, а именно:
Чтобы проверить торгового робота на диапазоне параметров можно «проходить» диапазон не в циклах (как сейчас во всех программах), а при помощи генетических алгоритмов. И время сокращается в 9-12 раз.
Я бы описал основное применение, а именно:
Чтобы проверить торгового робота на диапазоне параметров можно «проходить» диапазон не в циклах (как сейчас во всех программах), а при помощи генетических алгоритмов. И время сокращается в 9-12 раз.
+1
можно трактовать как I do it — я делаю это, а можно подумать, что популяция просто перепутала местами 3 и 4 символ:)
0
Zetway: Первое существо, которое создал Бог, говорило только «Hello, World!» и умирало...
+10
Я в генетических алгоритмах не силен, точннее вообще их не знаю и не понимаю. Но решим их изучения наткнулся на странный эффект.
Если добавить символ z в строку, то перебор до этого символа не доходит. Доходит только до «y».
Гдето собака зарыта ;)
Если добавить символ z в строку, то перебор до этого символа не доходит. Доходит только до «y».
Гдето собака зарыта ;)
+1
По-моему пример, использующий в качестве фитнесс функции сравнение с эталоном, ужасен. Генетические алгоритмы используют как раз для того, чтобы вычислить этот эталон. Если эталон известен заранее — в генетическом алгоритме нет смысла, в данном случае он не решает вообще никакую задачу.
+17
вот мне этот момент тоже непонятен совершенно.
и полностью дискредитирует идею генетических алгоритмов.
и полностью дискредитирует идею генетических алгоритмов.
-1
Почему это один некорректный пример «полностью дискредитирует» давно себя отлично зарекомендовавшую идею?
При правильно подобранной фитнес-функции ГА работают очень неплохо, иногда им просто нет альтернативы.
При правильно подобранной фитнес-функции ГА работают очень неплохо, иногда им просто нет альтернативы.
+1
потомучто конерктно в этой статье, рандомный читатель, в соответствии с названием может ожидать «максимально простую реализацию ГА, иллюстрирующую их свойства»
а вместо этого видит максимально корявый пример.
а вместо этого видит максимально корявый пример.
0
Повторяю вопрос — как один частный корявый пример может дискредитировать идею вообще?
0
Вы знаете что такое дискредитация? Вот если б я не осознавал, что пример неудачный, то сказал бы что ГА — это баловство. Хотя сомневаюсь, что автор делает это умышленно.
0
вы искренне полагаете, что повторение вопроса поможет вашему пониманию ответа на него?
поясняю:
этот пример может быть единственно известным читателю, заинтересовавшемуся статьёй.
поясняю:
этот пример может быть единственно известным читателю, заинтересовавшемуся статьёй.
0
Довольно таки странный пример. Мне не известны люди, выстраивающие свое мнение о какой либо теме на основании первой же левой статьи. Тем более что даже эта статья содержит библиографические ссылки.
0
данная статья в той форме как есть у непосвящённого читателя достигает единственной цели — продемонстрировать абсурдность ГА.
в чём ещё смысл этой левой статьи?
в чём ещё смысл этой левой статьи?
-1
Она демонстрирует непонимание автором смысла ГА, только и всего. Сами то ГА при чем?
0
этот смысл доступен только тем, кто понимает ГА.
а не рандомному читателю, с позиций которого я о ней сужу.
а не рандомному читателю, с позиций которого я о ней сужу.
0
Рандомный читатель, найдя какую либо статью, пройдет по приведенным в статье ссылкам, прочитает соответствующий раздел в Википедии и только после этого составит какое-то мнение. Это если тема хоть немного ему интересна. Если нет, то никакого мнения он составлять и не будет.
0
Поделитесь нормальным примером. Очень интересно попробовать.
0
Например, вот эта классическая задача (правда, это эволюционный алгоритм, обобщение генетического):
en.wikipedia.org/wiki/The_Evolution_of_Cooperation
Еще очень красивый (но очень сложный) пример:
www.framsticks.com/
en.wikipedia.org/wiki/The_Evolution_of_Cooperation
Еще очень красивый (но очень сложный) пример:
www.framsticks.com/
0
Во, и я задлася тем же вопросом. Есть эталон, программа пытается его найти брутфорсом, хотя вот он лежит в памяти. Сразу зреет вывод, что либо пример бестолковый, либо генетические алгоритмы туфта. Не увидел реального толку от ГА в этом примере. Хотя очень хотелось…
0
Перенесите в «Ненормальное программирование». Ибо это самый извращенный способ вывода «hello world»
+11
В коде, имху, ошибка.
...
buffer[i].str = population[i1].str.substr(0, spos) + population[i2].str.substr(spos, esize - spos);
...
Вместо substr(spos, esize - spos) надо substr(spos, tsize - spos)
0
#pragma warning(disable:4786) // отключаем отладочные предупреждения
А за такое предлагаю бить по рукам, сильно и больно.
А за такое предлагаю бить по рукам, сильно и больно.
+16
НЛО прилетело и опубликовало эту надпись здесь
Спасибо всем, кто помог сделать статью лучше и полнее. Больше сотни в избранном, значит результат есть, а это главное.
0
Мы вот с другом задумались. У вас ведь задача получается с одним глобальным экстремумом? И локальные экстремумы совпадают с глобальным.
Можно ли вашу целевую функцию сделать функцией с двумя глобальными экстремумами. Чтобы задача интереснее была.
Можно ли вашу целевую функцию сделать функцией с двумя глобальными экстремумами. Чтобы задача интереснее была.
0
Ну и мы сделали так:
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
0
Ну и мы сделали так:
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
1) ввели вторую цель той же длины #define GA_TARGET2 std::string(«Hello gnome!»)
2) изменили целевую функцию
population[i].fitness = 0;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target[j]));
}
population[i].fitness = fitness;
fitness = 0;
for (int j=0; j<tsize; j++) {
fitness += abs(int(population[i].str[j] — target2[j]));
}
population[i].fitness *= fitness;
Т.е. определили её как произведение модулей разности целевых векторов и особи.
И теперь алгоритм падает то к одному то ко второму экстремуму.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
«Hello world!» с помощью генетических алгоритмов