К сожалению, я не математик, не совсем понял то, что вы написали в начале этой страницы. Если говорить о моей задаче, то есть набор из семи векторов, нужно найти все возможные комбинации элементов этих векторов, дающих в сумме число 256.
Зачем оно ТС я не знаю. Мне оно затем, что попросили условие задачи сформулировать, плюс мне интересно как при помощи ГА можно решить такую сложную задачу.
Mathemat: А хоть кто-нибудь задумался, зачем топикстартеру и Виталию решение этой задачи - причем именно со всеми вариантами?
Я задумался. И высказывался - что практического смысла не вижу.
vitali_yv:
Зачем оно ТС не знаю. Мне оно надо потому, что попросили условия задачи сформулировать и мне интересно как при помощи ГА можно решить такую сложную задачу.
Ой. А я, грешным делом, подумал что Вы топикстартер. :[
Тогда всё отменяется. Ждем таинственного создателя загадочно-ненужной задачи.
A = 1112161923252627293437384346485859626473
B = 237911161831323341424347535460616481
C = 79152224252728293442444652536466676870
D = 1541518192432343942464748496061687277
E = 912192124272935434546555861646566687182
F = 611122226324248525458616465728384879497
G = 49141519263537394045485253596367707476
A + B + C + D + E + F + G = 256
Ну давайте я вам сделаю задание. Неизвестно, повторяются ли значения в переменных, допустим что да. Надо найти все варианты.Задача упрощена - 7 переменных, 20 вариантов.
Ну что ж, задача решена. Один из вариантов решения такой:
64+11+9+24+24+72+52=256
Обещанные исходники для решения этой задачи и ей подобных прилагаю.
Есть только один нюанс. Алгоритм разрабатывался для задач, в которых переменные строго уникальны и перестановка их в выражении не допустима, например для такой функции:
f(x,y)=x*x+y.
Совершенно понятно, что значения x и y поменять местами нельзя, иначе изменится значение функции. Поэтому, в алгоритме признаются совершенно одинаковыми только хромосомы типа
3,9,8,7,4,5,3 и 3,9,8,7,4,5,3. Если сравниваются хромосомы вида 3,9,8,7,4,5,3 и 3,8,9,7,4,5,3 то считается, что это совершенно разные хромосомы.
Поэтому мой алгоритм не пригоден для поиска всех решений вышеозвученных типов задач, в которых "от перестановки мест слагаемых сумма не меняется".
По этой причине после однократного запуска алгоритма возможно получить только один вариант решения, а не все. Одно из решений я привел выше.
Для того, что бы сделать алгоритм пригодным для таких типов задач необходимо ввести опционально включаемое правило "от перестановки мест слагаемых сумма не меняется" и хромосомы вида 3,9,8,7,4,5,3 и 3,8,9,7,4,5,3 считать дубликатами.
К сожалению, я не математик, не совсем понял то, что вы написали в начале этой страницы. Если говорить о моей задаче, то есть набор из семи векторов, нужно найти все возможные комбинации элементов этих векторов, дающих в сумме число 256.
А хоть кто-нибудь задумался, зачем топикстартеру и Виталию решение этой задачи - причем именно со всеми вариантами?
Я задумался. И высказывался - что практического смысла не вижу.
vitali_yv:
Зачем оно ТС не знаю. Мне оно надо потому, что попросили условия задачи сформулировать и мне интересно как при помощи ГА можно решить такую сложную задачу.
Ой. А я, грешным делом, подумал что Вы топикстартер. :[
Тогда всё отменяется. Ждем таинственного создателя загадочно-ненужной задачи.
Ну зачем отменяется? Давайте я специально для вас тему создам со своим условием, если вы хотите решать её только если я ТС )
Не стоит новую ветку заводить. Для этого уже есть ветка Алексея. Все перечисленные здесь варианты задачи решаются с помощью ГА.
Всё же, хочется услышать начальника транспортного цеха.
Ну вот, а обещали золотые горы.
Ну давайте я вам сделаю задание. Неизвестно, повторяются ли значения в переменных, допустим что да. Надо найти все варианты.Задача упрощена - 7 переменных, 20 вариантов.
Ну что ж, задача решена. Один из вариантов решения такой:
64+11+9+24+24+72+52=256
Обещанные исходники для решения этой задачи и ей подобных прилагаю.
Есть только один нюанс. Алгоритм разрабатывался для задач, в которых переменные строго уникальны и перестановка их в выражении не допустима, например для такой функции:
f(x,y)=x*x+y.
Совершенно понятно, что значения x и y поменять местами нельзя, иначе изменится значение функции. Поэтому, в алгоритме признаются совершенно одинаковыми только хромосомы типа
3,9,8,7,4,5,3 и 3,9,8,7,4,5,3. Если сравниваются хромосомы вида 3,9,8,7,4,5,3 и 3,8,9,7,4,5,3 то считается, что это совершенно разные хромосомы.
Поэтому мой алгоритм не пригоден для поиска всех решений вышеозвученных типов задач, в которых "от перестановки мест слагаемых сумма не меняется".
По этой причине после однократного запуска алгоритма возможно получить только один вариант решения, а не все. Одно из решений я привел выше.
Для того, что бы сделать алгоритм пригодным для таких типов задач необходимо ввести опционально включаемое правило "от перестановки мест слагаемых сумма не меняется" и хромосомы вида 3,9,8,7,4,5,3 и 3,8,9,7,4,5,3 считать дубликатами.
Исходники написаны на MQL5.
PS Про какие там тысячелетия говорили, необходимые для решения задачи? :)