|
OFF: Решение задачи о ранце, подобрать числа к множеству чисел | ☑ | ||
---|---|---|---|---|
0
Ник второй
11.03.15
✎
16:58
|
Почитал все темы на мисте, но так и не определился с оптимальным решением.
Задача: Есть большой набор произвольных целых чисел (1 млн чисел). Так же существует менее большой набор числовых промежутков (100000). Необходимо использовать максимальную сумму числе для подбора всех промежутков. Лучшее решение является сумма промежутков на максимальную сумму подобранных чисел Пример: 1,2,3,4,5,6,7,8,9, 10 промежутки: 3-5, 6-8, 55 - 57 Плохое решение: промежуток 3-5 можно подобрать значениями 3,2 А промежуток 6-8 значениями 7,1 Плохое решение: 55 - 57 подобраны все числа. Лучшее решение: 55 - 57 подобраны (10, 9,7,6,4,3,2,1) 3-5 числа: 5 6-8 числа: 8 |
|||
1
Garykom
гуру
11.03.15
✎
17:07
|
(0) ни... не понял!
|
|||
2
Ник второй
11.03.15
✎
17:16
|
Так.... попытка номер два ))
Существует пул целых чисел, они произвольные. Всего таких чисел почти 1 млн. Также существует пул числовых интервалов. Таких промежутков 100 тыщ. Необходимо подобрать сумму из чисел первого ряда, так что бы они попали в интервалы из второго ряда. При подборе надо исходить из того, что не должно остаться интервалов без подобранных чисел. Лучшим решением является минимальное значение Сумма(интервалов) - Сумма(подобранных чисел). |
|||
3
Ник второй
11.03.15
✎
17:18
|
Сейчас алгоритм работает так:
цикл по всем интервалам и подбирается максимальное число их рада 1. Дальше в цикле повторяем, пока не пробежим всеми числами. Но есть мысль что существует более оптимальное решение. |
|||
4
Гёдза
11.03.15
✎
17:21
|
Задача собрать НЕСКОЛЬКО рюкзаков, как можно плотнее
|
|||
5
Ник второй
11.03.15
✎
17:21
|
(4) Собрать все рюкзаки как можно плотнее )
|
|||
6
Гёдза
11.03.15
✎
17:23
|
(5) оптимальность решения по общей сумме идет или по количеству полностью загруженных рюкзаков?
|
|||
7
Garykom
гуру
11.03.15
✎
17:27
|
(2) надо наполнить рюкзаки минимальным кол-вом чисел?
т.е. чем плохо решение для промежутка 3-5 суммой чисел 3+2=5 ? в отличие от одной 5 ? |
|||
8
Ник второй
11.03.15
✎
17:28
|
по общей сумме рюкзаков за минусом подобранных вещей
Пример: Рюкзак1 вместимость 100 подобранных вещей на 90 Рюкзак2 вместимость 40 подобранных вещей на 26 Рюкзак3 вместимость 65 подобранных вещей на 3 итого (100+40+65) - (90+26+3). Чем меньше эта разница тем лучше. |
|||
9
Ник второй
11.03.15
✎
17:29
|
(7) в данном случае решение одинаково хороши.
|
|||
10
Ник второй
11.03.15
✎
17:30
|
смекнул, что лучше брать не интервалы, а максимальную вместимость рюкзаков, так будет оптимальнее. Но в алгоритме (3) сейчас используются именно интервалы, а именно если подобранная сумма входит в интервал, то останавливаем подбор.
|
|||
11
Garykom
гуру
11.03.15
✎
17:32
|
Рюкзаки - интервалы пересекаться могут?
Задача всегда имеет решение? Т.е. может числе не хватить? Или можно числа по нескольку раз юзать )) |
|||
12
Михаил Козлов
11.03.15
✎
17:32
|
(0) Верно ли понял, что сумма чисел, отнесенных к одному интервалу должна быть в границах интервала?
Тогда не понятно, как сумма чисел (10,9,7,6,4,3,2,1) попадает в интервал 55-57. (8) Т.к. сумма длин интервалов от решения не зависит, ее в критерии можно опустить. |
|||
13
Ник второй
11.03.15
✎
17:32
|
(11) да
|
|||
14
Garykom
гуру
11.03.15
✎
17:33
|
(10) да лучше заполнять максимальными числами по верхнему пределу и если не получилось то оставить такой рюкзак (незаполненный) на последок
после заполнения всех рюкзаков по верхнему пределу перейти к заполнению оставленных на (макс.вместимость-1) и т.д. |
|||
15
Ник второй
11.03.15
✎
17:33
|
(12) Да , тоже дошел до этого )
|
|||
16
Ник второй
11.03.15
✎
17:34
|
(14) Если по порядку заполнять рюкзаки, то может выйти так, что часть рюкзаков останется пустыми, это не верно.
Поэтому сейчас в цикле и распределяются числа. |
|||
17
Лодырь
11.03.15
✎
17:37
|
(16) А чем хуже вариант с рюкзаками оставшимися пустыми? Ну все влезло в предыдущие.
|
|||
18
Garykom
гуру
11.03.15
✎
17:38
|
(16) а это уже отдельная задача перераспределения содержимого рюкзаков
|
|||
19
mr_K
11.03.15
✎
17:40
|
(16) по одному макс.доступному числу в каждый рюкзак, а далее (14)
|
|||
20
Ник второй
11.03.15
✎
17:40
|
(17) Задача о себестоимости, не может быть продукции без себестоимости, что то на нее должно пойти.
|
|||
21
Михаил Козлов
11.03.15
✎
17:45
|
Учитывая размерности, даже жадный алгоритм будет давать порядка 1 000 000 * 100 000 операций (100 ярдов). Тут, мне кажется, не до оптимальности.
|
|||
22
Бубка Гоп
11.03.15
✎
17:45
|
новый вид учета - рюкзаковый. рауз отдыхает. не говоря уж о партионном :)
|
|||
23
Ник второй
11.03.15
✎
17:49
|
(19) Будет ли данный способ оптимальным и задействовать максимальное сумму чисел?
|
|||
24
Garykom
гуру
11.03.15
✎
17:50
|
(20) можно спросить? а нафига? т.е. чем Вам реальная себестоимость не устроила?
|
|||
25
Ник второй
11.03.15
✎
17:51
|
(24) Что есть реальная себестоимость? Ее не существует это миф.
|
|||
26
Garykom
гуру
11.03.15
✎
17:52
|
(25) э?
|
|||
27
Ник второй
11.03.15
✎
17:52
|
(18) Вот мы заполним максимально рюкзаки по очереди, то Вы уверены, что при этом задействуется максимальная сумма чисел? Я что то сомневаюсь
|
|||
28
Garykom
гуру
11.03.15
✎
17:53
|
(25)(26)+ т.е. я не спорю что реальную можно иногда высчитать только после продажи товара и выплаты зп (всех долгов по связанным контрагентам)
но почему низзя то? |
|||
29
Ник второй
11.03.15
✎
17:54
|
(26) Себестоимость по партиям сильно отличается от РАУЗ, а играясь ном группами, так же можно себестоимость изменить до не узнаваемости.
Но ни одна из этих методик не решает задачу максимализировать себестоимость. |
|||
30
Гёдза
11.03.15
✎
17:54
|
(28) Это уже не себестоимость, а итоговая маржа.
Или себестоимость = продали - прибыль? |
|||
31
Ник второй
11.03.15
✎
17:54
|
(28) Ушли в другую тему. Нет такого понятия как реальная себестоимость, дайте ей определение )
|
|||
32
mr_K
11.03.15
✎
17:55
|
(23) Нет конечно. Оптимальный способ гарантировано будет найден за О(1000000^100000), ну т.е. полный перебор. Все остальное - только лишь приближение (иногда совпадающее с оптимумом)
|
|||
33
Ник второй
11.03.15
✎
17:56
|
(32) А различные методики ветвей, генетический алгоритм, тут не помогут?
|
|||
34
Garykom
гуру
11.03.15
✎
17:57
|
(30) нет просто себестоимость это все затраты, в т.ч. дополнительные кроме стоимости товара
"за скоко купили" + "транспортные" + "мелкая часть от аренды склада" + "мелкая часть от выплаченной зп" + ... = себестоимость |
|||
35
Garykom
гуру
11.03.15
✎
17:59
|
(33) не зная ограничения на числа и какие есть точно решения нет
|
|||
36
mr_K
11.03.15
✎
18:00
|
(33) Почему нет? Нужно исследовать вопрос. Наверняка не скажу. Эти алгоритмы (и не только эти) ищут приближенное решение, иногда с заданной точностью, для задач подобной сложности. Какой алгоритм в данном случае будем лучшим - сложно сказать. Я бы исходил все-таки прежде всего из ограниченных вычилительных мощностей)
|
|||
37
Ник второй
11.03.15
✎
18:01
|
(34) А вот можно часть материалов оставить в производстве и не распределять на продукцию. Таким образов всегда остается пул, которым можно добивать себестоимость будущих продукций.
Поэтому сейчас изначально распределяются косвенные затраты, а потом уже прямые (материальные) |
|||
38
mr_K
11.03.15
✎
18:03
|
А вашего ГБ налоговая за подобную методологию за .опу не схватит?)) Как-то уж больно далеко от классических вариантов и на мухлеж смахивает
|
|||
39
Гёдза
11.03.15
✎
18:04
|
А зачем вообще тогда себестоимость по единице продукции считать? Считайте по группам, или вообще котоловым способом
|
|||
40
Ник второй
11.03.15
✎
18:07
|
(38) Любой расчет себестоимости это мухлеж.
|
|||
41
Михаил Козлов
11.03.15
✎
18:24
|
(40) Зачем Вам тогда интервалы? Просто набивайте рюкзаки, скажем, жадным алгоритмом (ничто другое по Вашим размерностям не прокатит).
|
|||
42
Ник второй
11.03.15
✎
18:30
|
(41) Жадный сейчас и работает... но была надежда на поиск более оптимального
|
|||
43
Михаил Козлов
11.03.15
✎
18:45
|
(42) А жадный чем плох? Проверить-то его не можете.
Кстати, сколько времени он у Вас молотит? |
|||
44
bolobol
11.03.15
✎
19:16
|
(8) Я один не понял, что математику обмануть невозможно?
(100+40+65) - (90+26+3) = 205 - 119 Заполнить 205 затратами на 119 - куда не разделяй, суммы не изменятся. Где интервалы? Тема не раскрыта! |
|||
45
Garykom
гуру
11.03.15
✎
19:19
|
(44) у них фиктивные доки... в данном случае налога большая т.к. плоха доки подделать...
|
|||
46
bolobol
11.03.15
✎
19:36
|
(45) Я не про это. Рассматривая интервалы, в уравнении (8) должны присутствовать диапазоны, вида:
(100+40+65) - (90+26+3) = 205 - 119 = -86 ( 85+25+ 2) - (90+26+3) = 112 - 119 = + 7 и мне, кагбэ, не предположить, какой связующий параметр минимизируется в этих уравнениях, может: -86 + 7 ? |
|||
47
bolobol
11.03.15
✎
19:41
|
+(46) из (0): "Лучшее решение является сумма промежутков на максимальную сумму подобранных чисел" - сумма промежутков - величина постоянная, максимальная сумма подобранных чисел - это сумма всех чисел. Распределить нужно все числа по всем промежуткам. Итого, минимизируем разницу между двух констант??
|
|||
48
bolobol
11.03.15
✎
19:45
|
+(47) из (0):
Пример: 1,2,3,4,5,6,7,8,9, 10 промежутки: 3-5, 6-8, 55 - 57 Плохое решение: промежуток 3-5 можно подобрать значениями 3,2 А промежуток 6-8 значениями 7,1 Плохое решение: 55 - 57 подобраны все числа. Лучшее решение: 55 - 57 подобраны (10, 9,7,6,4,3,2,1) 3-5 числа: 5 6-8 числа: 8 "Плохое решение: 55 - 57 подобраны все числа." - все числа имеют сумму 55, задача в принципе своём не может быть решена. "Лучшее решение: 55 - 57 подобраны (10, 9,7,6,4,3,2,1) 3-5 числа: 5 6-8 числа: 8" - противоречит условию - не попали в диапазон 55-57, сумма = 42. |
|||
49
bolobol
11.03.15
✎
19:49
|
+(48) Опять же, про лучшее решение: разность между тремя диапазонами, даже если предположить, что задача верно решена:
55-57 (42) = -13 -15 3-5 (5) = +2 0 6-8 (8) = +2 0 Итог: -9 -15 "Неудачное" решение: 55-57 (55) = 0 -2 3-5 (0) = -3 -5 6-8 (0) = -6 -8 Итог: -9 -15 Хм... а где же..?. не знаю что)) |
|||
50
Лодырь
12.03.15
✎
03:43
|
(47) Так, но не так. Приведенные изначально примеры не совсем удачны, имхо. Как было написано выше, незаполненных рюкзаков не должно быть.
|
|||
51
Ник второй
12.03.15
✎
09:07
|
(47) Да... но при определенных ограничениях
|
|||
52
Ник второй
12.03.15
✎
09:07
|
(48) Ты плохой чтец ) Не увидел, что важно ко всем интервалам подобрать числа
|
|||
53
Ненавижу 1С
гуру
12.03.15
✎
09:15
|
что такое "сумма интервалов"?
|
|||
54
Garykom
гуру
12.03.15
✎
09:40
|
(52) т.к. скорее всего все числа (с кол-вом отличным от 1) можно использовать несколько раз (для разных интервалов)
то задача сводится просто к максимально плотной укладке рюкзаков, т.е. пофиг нам сколько их алгоритм для одного рюкзака применяем ко всем интервалам в цикле ЗЫ "умные" люди решают проблему не математически а организационно...делая нужные фирме 1 числа через фирму 2 (собственную по факту) которая покупает материалы и продает с нужной ценой (когда больше, когда меньше закупа, так чтобы прибыль была почти 0 справа)... |
|||
55
Garykom
гуру
12.03.15
✎
09:50
|
(54)+ кстати быстрейший (время предварительной подготовки и занимаемое место в БД не учитываем) алгоритм будет это сделать с имеющимся лямом чисел всевозможные суммы заранее
т.е. для всех возможно требуемых сумм от 1 до максимальная сумма заранее делаем подбор составляющих числе и в базу их повторяем/обновляем подбор периодически при новых поступлениях чисел в результате когда нам нужна сумма - она уже есть в базе и по индексу моментом найдется... |
|||
56
Ник второй
12.03.15
✎
10:21
|
(54) Все числа имеют уникальный номер. Использовать одно и тоже число несколько раз нельзя.
|
|||
57
Garykom
гуру
12.03.15
✎
10:24
|
(56) вы что по одной штуке материалы покупаете? ))
|
|||
58
Ник второй
12.03.15
✎
10:26
|
(55) Числа уникальны и их общая сумма обычно значительно больше чем сумма интервалов. И задача стоит оптимально утрамбовать рюкзаки.
Не понимаю в чем выгода хранить общую сумму всех чисел. Дробить числа нельзя. |
|||
59
Ник второй
12.03.15
✎
10:27
|
(57) Это уже коммерческая тайна ).... но вот есть такая особенность)
|
|||
60
Ненавижу 1С
гуру
12.03.15
✎
10:28
|
ответь на (53)
|
|||
61
Garykom
гуру
12.03.15
✎
10:28
|
(58) выгода в том чтобы расчет заранее сделать когда числа приходят на склад...а когда нужна сумма при производстве уже готовые наборы чисел просто искать по требуемой сумме
|
|||
62
Ник второй
12.03.15
✎
10:43
|
(60) Сумма максимальных значений интервалов
|
|||
63
Ник второй
12.03.15
✎
10:44
|
(61) Сумма всех чисел ? ну допустим имеем числа на сумму 100, а интервалов на 50... что это дает?
|
|||
64
МихаилМ
12.03.15
✎
11:41
|
задача называется "Мультипликативный рюкзак"
|
|||
65
Михаил Козлов
12.03.15
✎
12:19
|
(64) Почему "мультипликативный"? Вроде никаких умножений нет.
|
|||
66
Garykom
гуру
12.03.15
✎
12:34
|
(63) причем тут это?
допустим максимальная сумма (которую возможно нужно подобрать) 10 миллионов тогда заранее считаем-рассчитываем все 10 миллионов комбинаций (реально меньше выйдет т.к. не все получится подобрать) сумма 1: числа 1 сумма 2: числа 2 сумма 3: числа 1+2, 3 сумма 4: числа 1+3, 4 сумма 5: числа 1+4, 2+3, 5 сумма 6: числа 1+5, 1+2+3, 2+4, 6 и т.д. т.е. числа то известны ведь заранее (раньше чем требуемая к подбору сумма) и их количество ограничено (1 миллион) значит все комбинации чисел (с получаемой ограниченной сверху суммой) можно заранее найти записать их в базу данных и юзать быстро находя когда нужно |
|||
67
Ник второй
12.03.15
✎
12:53
|
(66) Найти надо сразу все комбинации без пересечений.
И числа становятся известны только в момент расчета ( |
|||
68
Garykom
гуру
12.03.15
✎
13:00
|
(67) "числа становятся известны только в момент расчета" - это вы искусственно себя ограничили
что все числа не спорю, но они же приходят/уходят постепенно? не бывает так что все документы производства делаются разом 31 декабря за весь год с 1 января... |
|||
69
Ник второй
12.03.15
✎
13:55
|
(68) Естественно, но большинство вконце месяца. И все же не вижу выгоды сформировали N набор и этих наборов может быть больше чем самих чисел.
|
|||
70
Гёдза
12.03.15
✎
14:01
|
Изучай
http://www.informatik.uni-kiel.de/fileadmin/arbeitsgruppen/theory_of_paralle/Publications/Pub2009/fast-long.pdf A fast approximation scheme for the multiple knapsack problem |
|||
71
Михаил Козлов
12.03.15
✎
14:13
|
(70) Не уверен, что пригодна для нужной ТС размерности: требуется релаксация к задаче линейного программирования (правда специального вида).
|
|||
72
Garykom
гуру
12.03.15
✎
14:13
|
(69) вместо операций подбора, сложения и сравнения
делаем только операцию поиска в бд, все прочее уже сделано ранее т.е. 5 сек и нужные числа для нужных сумм подобраны (найдены в базе), понятно что базу надо обновлять |
|||
73
Garykom
гуру
12.03.15
✎
14:15
|
(72)+ кстати тут "зачем" это вопрос из разряда "а зачем в 1С нужны регистры накопления" ?
можно же когда надо просто документы сложить...вычесть... |
|||
74
Бубка Гоп
12.03.15
✎
14:16
|
(70) Толковая книженция
|
|||
75
Garykom
гуру
12.03.15
✎
14:23
|
Кстати чтобы понятнее ))
Вместо того чтобы рассчитывать себестоимость производства продукции в момент проведения дока производства (по спецификации) Можно заранее рассчитать всевозможные себестоимости для всех спецификаций (из N сырья получают продукцию) в момент заведения спецификации Зная на момент заведения цены всех поступлений сырья Понятно про при новом поступлении сырья (новая цена) надо возможные себестоимости для спецификаций пересчитать... |
|||
76
Михаил Козлов
12.03.15
✎
15:32
|
(60) Для одного значения суммы может быть много комбинаций получения суммы. Например, если все числа = 1 и их всего 2n, то для сумма = n число комбинаций будет = число сочетаний из 2n по n.
Для многократного решения задачи о ранце (с разными значениями его емкости ) это имеет смысл. Для задачи ТС реализация идеи мне неясна. |
|||
77
bolobol
12.03.15
✎
16:11
|
Тут, по задаче, даже метод динамического программирования использовать не рекомендуется, он потребует 4 террабайта памяти в особо оптимизированном случае. А если ещё и возвести в количество вариантов (в степень 100 000) - понятно, что даже дюже оптимизированный способ разворачивания подготовительных данных не влезет в базу данных, не то что все сочетания ко всем количествам.
|
|||
78
csharpprogrammer
12.03.15
✎
17:05
|
В задаче главное скорость или величина разницы?
|
|||
79
Ник второй
13.03.15
✎
10:38
|
(78) оба важны.
Реализация через динамическое программирование показала хорошую работу (подобрало все точь в точь), но крайне медленную скорость, на тестовых данных. Если жадный алгоритм справлялся за секунды на 1000 предметах и 100 рюкзаках, то динамическое выполняется часами. |
|||
80
Ник второй
13.03.15
✎
10:38
|
(79) Что не приемлимо.
|
|||
81
Ник второй
13.03.15
✎
10:40
|
(80) + В динамическом особая проблема заключается в формировании двухмерного массива, если размер рюкзака 100000 и больше, то матрица из 100 предметов получается 100000*100...
|
|||
82
Ник второй
13.03.15
✎
10:45
|
Вопрос математикам, Может есть возможность сбора массива с конца, что бы остановиться посередине пути и выбрать подходящую комбинацию.
|
|||
83
Ник второй
13.03.15
✎
10:45
|
?
|
|||
84
Лодырь
13.03.15
✎
12:12
|
ну скорость даже близко приближающуюся к жадному алгоритму ты не получишь никак. можешь попробовать метод ветвей и границ, но он все равно близок к методу полного перебора и скорее всего медленнее динамического программирования.
|
|||
85
Гёдза
13.03.15
✎
12:15
|
Нужно юзать параллельные вычисления и явно не на 1с
|
|||
86
csharpprogrammer
13.03.15
✎
12:24
|
Каков алгоритм реализации через динамическое программирование?
|
|||
87
Михаил Козлов
13.03.15
✎
12:28
|
(84) И пробовать не стоит: пустая трата времени.
Если немного "наплевать" на отрицательную маржу по некоторым товарам (с сохранением общей положительной), я бы добавил чего-нибудь в ранцы, в которых большая разница между выручкой и себестоимостью. Типа: - отсортировать "ранца" по разнице между выручкой и себестоимостью по убыванию; - отсортировать оставшиеся "материалы" по возрастанию; - добавлять в "ранцы" "материалы" с контролем % превышения себестоимости над выручкой. |
|||
88
Ник второй
13.03.15
✎
13:43
|
(86)
for i = 0..W A[0][i] = 0; for i = 0..N A[i][0] = 0; //Первые элементы приравниваем к 0 for k = 1..N for s = 0..W //Перебираем для каждого k все вместимости if s >= w[k] //Если текущий предмет вмещается в рюкзак A[k][s] = max(A[k-1][s], A[k-1][s-w[k]]+p[k]); //выбираем класть его или нет else A[k][s] = A[k-1][s]; //иначе, не кладем Затем найдем набор ans предметов, входящих в рюкзак, рекурсивной функцией: findAns(k, s) if A[k][s] == 0 return; if A[k-1][s] == A[k][s] findAns(k-1, s); else findAns(k-1, s - w[k]); ans.push(k); http://neerc.ifmo.ru/wiki/index.php?title=Задача_о_рюкзаке |
|||
89
Ник второй
13.03.15
✎
13:44
|
(85) Ну хочется не секунды, но пусть минуты... но не когда 1000 предметов на 100 ранцев рассчитывается почти сутки.
|
|||
90
Ник второй
13.03.15
✎
13:46
|
(85) Какие идеи распараллеливания? Просто если параллельно два разных ранца используют один и тот же предмет, то возникнет конфликт, как его решать?
|
|||
91
bolobol
13.03.15
✎
13:50
|
Есть ещё вариант - симплекс-метод. Максимизация результата по 100 000 переменным и 200 000 неравенствам. Обычный алгоритм говорит, что взять 0.236 раза первую цену, 0.17 пятую и 0.63 раза восьмую, остальные не брать... Так вот задача только в том, чтобы реализацию на целых числах найти.
|
|||
92
vasbur
13.03.15
✎
13:50
|
судя по всему, задача NP-полная, потому точного решения не получится найти.
Я бы подумал в сторону динамических алгоритмов: ищем какое-то решение, после чего пытаемся несколькими перестановками получить более оптимальное решение |
|||
93
Ник второй
13.03.15
✎
13:51
|
(92) Динамический алгоритм уже есть, скорость не устраивает ))) смотри (88)
|
|||
94
vasbur
13.03.15
✎
13:53
|
(93) он не линамический, вы там перебираете все счетания интервалов-числел
|
|||
95
Ник второй
13.03.15
✎
13:53
|
(94) Есть ли описание и пример?
|
|||
96
Лодырь
13.03.15
✎
13:54
|
(92) Ну это вы про метод ветвей и границ и говорите )
|
|||
97
vasbur
13.03.15
✎
13:55
|
(95) динамический - это как-то так:
1. перебираем все интервалы и для каждого берем первое попавшееся число. сложность порядка 100 тыс. 2. после этого берем случайный интервал и подбираем для него оптимальное число. Сложность порядка 1 млн. п.2 применяем до тех пор, пока не надоест. при этом цедевая функция будет постепенно минимизироваться. |
|||
98
vasbur
13.03.15
✎
13:55
|
(96) NP-полнота - это характеристика задачи а не алгоритма
|
|||
99
Лодырь
13.03.15
✎
14:03
|
(98) я про вторую часть высказывания про алгоритмы.
|
|||
100
bolobol
13.03.15
✎
14:06
|
(92) "ищем какое-то решение, после чего пытаемся несколькими перестановками" (97) "после этого берем случайный интервал" - вы не на метод Монте-Карло, случаем, намекаете?
|
|||
101
bolobol
13.03.15
✎
14:07
|
Будет как в анекдоте:
- Доктор, у меня что-то болит - Пожалуйста, вот вам какая-то таблетка... |
|||
102
Михаил Козлов
13.03.15
✎
14:39
|
(91) Хотел бы я посмотреть на задачу ЛП с такой матрицей.
Тем более я Вам сразу скажу ответ: все неравенства на вес ранцев сядут на равенства и сумма "материалов" = сумме "ранцев". (92) Классификация сложности задачи о ранце довольно хорошо известна (лень давать ссылку). |
|||
103
bolobol
13.03.15
✎
17:55
|
(102) Равно - не равно - на целых числах СМ зацикливается. Пока не победил. В интернетах описания для дискретных данных не нашёл, но из чертогов разума доносится, что мет0ды есть, а вот какие - не помню...
|
|||
104
Ник второй
13.03.15
✎
18:18
|
Пока решил так:
- Жадным алгоритмом выбираем вариант заполнения рюкзака. - случайным образом подбираю еще 100 наборов для рюкзака и выбираю лучший. Скорость приемлемая, но и результат не всегда ... |
|||
105
MadHead
13.03.15
✎
18:38
|
(104) хорошо подойдет генетический алгоритм. Я так задачу коммивояжера решал когда-то. Плюс ген алгоритма, что можно легко добавлять новые условия
|
|||
106
MadHead
13.03.15
✎
18:39
|
и не нужно выдумывать свое в задачах в которых правильные подходы давно найдены
|
|||
107
Ник второй
13.03.15
✎
18:55
|
(105) А есть ли пример, так как по вики я сужу что мой алгоритм уже обладает зачатками генетического...
|
|||
108
MadHead
13.03.15
✎
19:08
|
(107) на 1с примера нету, мне очень была важна скорость и я писал com объект. Если коротко, то случайным образом создаете своих 100 вариантов (начальная популяция). Из них выбираете 50 лучших(приспособленность). Потом немного их модифицируя (скрещивая попарно) получаете снова 100. Мутацию на первых парах можете опустить, что бы не забивать голову потом когда основной код будет работать добавите (мутация не сильно влияет на результат)
|
|||
109
MadHead
13.03.15
✎
19:10
|
(107) вот тут http://art4art.narod.ru/ga_intro.html на джаве есть решение
|
|||
110
Михаил Козлов
13.03.15
✎
19:12
|
(107) Не придавайте серьезного значения утверждениям в (105) и в (106).
Коммивояжер изъезжен вдоль и поперек и вовсе не общими схемами. Генетические алгоритмы - это не алгоритмы, а некая общая схема. По-моему, ничуть не лучше случайного выбора и примерно такой же оптимальности. (105) Попробуйте генетическим "алгоритмом" задачу Штейнера решить для скажем, 30 точек. |
|||
111
MadHead
13.03.15
✎
19:20
|
(100) очень смешно. Вы решали задачу коммивояжера в реальной жизни? )
|
|||
112
MadHead
13.03.15
✎
19:20
|
(100) -> (110)
|
|||
113
Ник второй
13.03.15
✎
19:32
|
(108) Как происходит скрещивание? Заменой предметами в случайном порядке? Потом опять отбор и выбор лучшего?.
Мутация как я понимаю это подмена из свободного пула предмета ? |
|||
114
Ник второй
13.03.15
✎
19:33
|
(110) Тоже не вижу выигрыша по сравнению с случайным выбором предметов, а наоборот потеря времени на скрещивание...
|
|||
115
MadHead
13.03.15
✎
19:35
|
(114) все суть в том что вы делаете не случайный выбор, а производите некое уточнение результата
|
|||
116
Михаил Козлов
16.03.15
✎
12:19
|
(112) Да: какое-то представление о дискретных задач у меня есть. Правда, давно отошел от дел.
Предлагаю Вам написать генетический алгоритм для решения системы неравенств в булевых переменных: 3*X1+3*X2+...+3*X1000<=1499 3*X1+3*X2+...+3*X1000>=1498 Xi = 0 или 1. Если алгоритм через обозримое время выдаст решение или ответ, что решения нет, я перечисляю Вам 10 000 руб. |
|||
117
Garykom
гуру
16.03.15
✎
12:40
|
(116) забыли уточнить на чем алгоритм будет выполняться
параллельный генетический на кластере из 1000 компов или обычный не параллельный на одном компе? |
|||
118
Михаил Козлов
16.03.15
✎
12:44
|
(117) На чем хотите: число компов сокращает время в лучшем случае линейно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |