|
|
|
Матрица вариантов раскроя | ☑ | ||
|---|---|---|---|---|
|
0
Myst
16.06.14
✎
03:54
|
Задача: Есть N-количество заготовок. Необходимо создать матрицу всех возможных комбинаций.
Есть еще какой-нибудь вариант кроме цикла в цикле? |
|||
|
1
Balabass
16.06.14
✎
04:19
|
(0) Чем плох цикл?
|
|||
|
2
Myst
16.06.14
✎
04:46
|
цикл включает дублирующиеся варианты
при N>20 слишком много вариантов. |
|||
|
3
Myst
16.06.14
✎
04:50
|
пример
множество 0,1,2 1.цикл 0;1;2;0,1;0,2;0,1,2;1,0;1,2;1,0,2;1,2,0;2,0;2,1;2,1,0;2,0,1 2. Нужно 0;1;2;0,1,2;0,1;0,2;1,2;2,0 |
|||
|
4
Myst
16.06.14
✎
04:54
|
фильтр не предлагать, ибо смысл не в том чтобы не было лишних вариантов, а в ресурсах требуемых на расчет матрицы вариантов
|
|||
|
5
Myst
16.06.14
✎
04:58
|
2. Нужно
0;1;2;0,1,2;0,1;0,2;1,2 лишний вариант был =) |
|||
|
6
bolder
16.06.14
✎
06:24
|
(5) Логичнее тогда так:
0;1;2;0,1;0,2;1,2;0,1,2; Цикл с увеличением числа элементов. |
|||
|
7
SeraFim
16.06.14
✎
06:37
|
Я ничего не понял
|
|||
|
8
Cube
16.06.14
✎
06:48
|
Пробовал делать я на запросе как-то подобное... Не взлетело, т.к. слишком много переменных было. Но тебе, может, подойдет...
Идея: нужно просто закодировать каждый вариант простым числом (кодом) так, чтобы из суммы кодов нескольких вариантов можно было однозначно определить все варианты, входящие в эту сумму. Реализация: самое простое, это у каждого варианта задать разный порядок. Допустим так (номер варианта - код): 1 - 1 2 - 10 3 - 100 4 - 1000 5 - 10000 и т.д. В запроссе получаешь все возможные варианты, суммируешь коды в итоговое поле и сворачиваешь по итоговому полю. Потом из итогового поля получаешь список вариантов. Пример: Число 11001 - это 1, 4, 5. Число 11 - это 1, 2. Число 1010 - это 2, 4. Число 11111 - это 1, 2, 3, 4, 5 |
|||
|
9
Myst
16.06.14
✎
06:55
|
(5) Логичнее тогда так:
0;1;2;0,1;0,2;1,2;0,1,2; Цикл с увеличением числа элементов. Все равно будут дубли. Нужна так называемая перестановка без повторений. |
|||
|
10
Myst
16.06.14
✎
06:57
|
Пробовал делать я на запросе как-то подобное... Не взлетело, т.к. слишком много переменных было. Но тебе, может, подойдет...
Идея: нужно просто закодировать каждый вариант простым числом (кодом) так, чтобы из суммы кодов нескольких вариантов можно было однозначно определить все варианты, входящие в эту сумму. Реализация: самое простое, это у каждого варианта задать разный порядок. Допустим так (номер варианта - код): 1 - 1 2 - 10 3 - 100 4 - 1000 5 - 10000 и т.д. В запроссе получаешь все возможные варианты, суммируешь коды в итоговое поле и сворачиваешь по итоговому полю. Потом из итогового поля получаешь список вариантов. Пример: Число 11001 - это 1, 4, 5. Число 11 - это 1, 2. Число 1010 - это 2, 4. Число 11111 - это 1, 2, 3, 4, 5 Не покатит. в последовательности может быть несколько одинаковых элементов |
|||
|
11
Cube
16.06.14
✎
07:16
|
(10) Почему?
Давай на примере: Число 12001 - это 1, 4, 4, 5. Число 12 - это 1, 1, 2. Число 1050 - это 2, 2, 2, 2, 2, 4. Число 13112 - это 1, 1, 2, 3, 4, 4, 4, 5 |
|||
|
12
Cube
16.06.14
✎
07:18
|
(11) Идея хороша при небольшом количестве разрядов. Уж не помню, на каких числах у меня запрос захлебываться начал...
Если идею дополнить более прогрессивным вариантом кодирования/декодирования переменных, то будет вообще бомба, но я в этом не силен :) |
|||
|
13
bolder
16.06.14
✎
07:20
|
(9) Какие дубли в приведенной последовательности?
Это не перестановки, а сочетания без повторений . |
|||
|
14
Myst
16.06.14
✎
07:34
|
Опишу ситуацию подробно.
Производство пластиковых окон. Оптимизация по распилу профиля ПВХ перед выгрузкой на станок резки. В массиве заготовок допустим на 3 изделия с габаритами: 1300*1200,2080*680,1300*700 будут: 1300 1300 1200 1200 2080 2080 680 680 1300 1300 700 700 длина одного хлыста профиля 6.5м. Необходимо найти наиболее удачные комбинации с минимальными отходами. Для этого надо СОБРАТЬ ВСЕ ВОЗМОЖНЫЕ ВАРИАНТЫ без повторов, исключив варианты превышающие длину хлыста и далее уже определить оптимальный Сейчас, пока думал пришел к мысли что можно ограничить число элементов в варианте путем вычисления ДлинаХлыста/МинимальнаяЗаготовка.Это сократит количество вариантов на много порядков. Но все равно никак не могу придумать алгоритм перестановки без дублей |
|||
|
15
Myst
16.06.14
✎
07:38
|
просто допустим количество вариантов при 6 элементах это уже 720 вариантов без повторений, с повторами намного больше. а при нормальной выгрузке 50 изделий число элементов 200
Никаких ресурсов не хватит |
|||
|
16
Cube
16.06.14
✎
07:38
|
(14) Я ничего не понял... Тебе из профиля нужно сделать 3 рамы с габаритами 1300*1200, 2080*680, 1300*700 или чо?
|
|||
|
17
Myst
16.06.14
✎
07:48
|
надо оптимизировать распил. т е надо наиболее оптимально подобрать заготовки друг к другу чтобы общая длинна была как можно ближе к 6.5м
Например 700+700+1300+1300+1200+1300 = 6500 2080+2080+680+1200 = 6040 2080+1300+1200 = 4580 |
|||
|
18
Myst
16.06.14
✎
07:49
|
в итоге разрез 3 палок с 1 нет отхода, со второй 460мм,с третьей остаток 1920мм
|
|||
|
19
Cube
16.06.14
✎
07:55
|
(17) (18) Слабак!
700+700+1300+1300+1200+1300 = 6500 2080+1300+1200+680+1200 = 6460 2080+2080 = 4160 с 1 - нет отхода с 2 - отход 40 мм с 3 - остаток 2340 мм =)) |
|||
|
20
Cube
16.06.14
✎
07:56
|
Идеальный результат получен. Осталось написать код, который это сможет сделать :)
|
|||
|
21
Cube
16.06.14
✎
07:59
|
(19) Нашел ошибку, в (17) она тоже есть - один кусок 2080 лишний.
В итоге результат: 700+700+1300+1300+1200+1300 = 6500 2080+1300+1200+680+1200 = 6460 2080 = 2080 с 1 - нет отхода с 2 - отход 40 мм с 3 - остаток 4420 мм |
|||
|
22
Myst
16.06.14
✎
08:01
|
(17) (18) Слабак!
700+700+1300+1300+1200+1300 = 6500 2080+1300+1200+680+1200 = 6460 2080+2080 = 4160 с 1 - нет отхода с 2 - отход 40 мм с 3 - остаток 2340 мм =)) как вариант =) просто 460 это ходовой остаток а не утиль =) вот и проблема в алгоритме сочетания который не повесит машину при N>12 |
|||
|
23
Myst
16.06.14
✎
08:03
|
циклы вешают при N>9 съедается 7 гигов оперативы и платформа благополучно схлопывается ((((
|
|||
|
24
Myst
16.06.14
✎
08:03
|
если навешивать условия записи в матрицу то время обработки измеряется сутками
|
|||
|
25
Мимохожий Однако
16.06.14
✎
08:06
|
Напоминает задачку про рюкзак
|
|||
|
26
kosts
16.06.14
✎
08:07
|
Создай матрицу рассчитанную наперед.
Пусть очень большая, но потом просто ищешь нужный вариант и готово. |
|||
|
27
Myst
16.06.14
✎
08:08
|
а хотя при 9 элементах из которых ходовые будут только варианты с 6. но проблема в повторах которые увеличивают обрабатываемые данные на несколько порядков. Исключение их даст возможность обрабатывать результат до 9 элементов. Хотя тоже проблематично потом будет работать с таблицей в 362880 строк
|
|||
|
28
kosts
16.06.14
✎
08:17
|
(27) А в чем проблема, дело компьютера обрабатывать данные, так пусть молотит. Если проиндексировать таблицу, еще быстрее будет работать.
|
|||
|
29
13_Mult
16.06.14
✎
08:24
|
А где припуск на толщину дика пилы?
|
|||
|
30
Cube
16.06.14
✎
08:34
|
(26) Я так понял, что нет типовых размеров заготовок и они могут быть произвольной длины...
|
|||
|
31
IamAlexy
16.06.14
✎
08:35
|
самое смешное что будет как всегда:
"мне плевать на вашу матрицу раскроя, мастеру виднее" :) |
|||
|
32
kosts
16.06.14
✎
08:48
|
(30) Но вот возьмем и пересчитаем все произвольные наперед.
Как вариант конечно. Может ТС придумает как на ходу посчитать быстро. |
|||
|
33
Myst
16.06.14
✎
09:18
|
А где припуск на толщину дика пилы?
Это мелочи так же как и ходовой остаток и оптимальный процент отходов. это уже вторичная обработка данных |
|||
|
34
Myst
16.06.14
✎
09:19
|
самое смешное что будет как всегда:
"мне плевать на вашу матрицу раскроя, мастеру виднее" :) не у нас тут автоматизированная линия вплоть до сварки =) дальше уже да хД |
|||
|
35
Myst
16.06.14
✎
09:22
|
А в чем проблема, дело компьютера обрабатывать данные, так пусть молотит. Если проиндексировать таблицу, еще быстрее будет работать.
проблема как раз в том что машина не может обработать такое количество вариантов в принципе. сервак с 2 головами Xeon'ы 16 гигов оперативы,рейд 10 ssd. |
|||
|
36
Myst
16.06.14
✎
09:24
|
Я так понял, что нет типовых размеров заготовок и они могут быть произвольной длины...
Да.. есть некоторые ограничения не менее 500мм и не более хлыста. |
|||
|
37
ildary
16.06.14
✎
09:25
|
(35) я в похожей ситуации (не хватало скорости 1С для перебора вариантов в задаче коммивояжера) - написал ВК и насладился быстродействием.
|
|||
|
38
IamAlexy
16.06.14
✎
09:28
|
(34) тогда не все потеряно, но мне кажется что это надо не в 1С делать а выносить во внешнюю компоненту.. типа http://www.astrapro.ru/astranest.asp
http://tehtran.com/nestf.html и курить именно на тему сопряжения стороннего отработанного и обкатанного ПО с 1Сом.. |
|||
|
39
IamAlexy
16.06.14
✎
09:30
|
+(38) потому что вот такое: http://www.tehtran.com/sites/default/files/imagecache/700w/images/avtoobrabotka.png - 0па треснет на 1С реализовывать..
|
|||
|
40
Ymryn
16.06.14
✎
09:42
|
Вообще, это оптимизационная задача. Соответственно надо искать нужный мат. метод и реализовывать его в коде. Т.е строится функция A1x1 + A2x2 + A3x3 <= С, где x1, x2, x3 и т.д - это количества, а коэффициентами выступают площади. Ограничивается это площадью бруска. После чего самое сложное, выбрать соответствующий мат. метод поиска решения. Увы, 4 курс универа, где мы это изучали уже давно позади и с выбором я не помогу с ходу. Надо гуглить :(
|
|||
|
41
МихаилМ
16.06.14
✎
09:48
|
(0)
дайте полное описание задачи. с ограничениями. в том числе укажите планируемые вычислительные мощности, приемлемое время ожидания расчета. |
|||
|
42
acsent
16.06.14
✎
10:10
|
разве это не задача о рюкзаке???
|
|||
|
43
Myst
16.06.14
✎
10:19
|
(42) даже более простая.
|
|||
|
44
acsent
16.06.14
✎
10:20
|
(43) в чем тогда проблема загуглить решение задачи о рюкзаке?
|
|||
|
45
Myst
16.06.14
✎
10:25
|
(44) загуглено, реализованно методом ветвей и границ. Не дает точный результат за счет невозможности обработки всего объема данных. Макс число вариантов в ветке 30. т е точность от нормального объема в 200 заготовок всего около 15%.
вот сейчас ребята в принципе подкинули идею на вк перенести. быстродействие повысить. но все равно как не крути машина 100% не даст таким образом. макс до 30-40 |
|||
|
46
МихаилМ
16.06.14
✎
10:27
|
(43)
нет. более сложная. в задаче о ранце 1 параметр оптимизации - вес. |
|||
|
47
Myst
16.06.14
✎
10:28
|
(46) 2 параметра. вес и стоимость. тут 1 параметр
|
|||
|
48
МихаилМ
16.06.14
✎
10:29
|
||||
|
49
Myst
16.06.14
✎
10:33
|
(48) спасибо. интересная тема. завтра подгоню под свою задачу и посмотрим что получится
|
|||
|
50
Cube
16.06.14
✎
11:36
|
Да не, мне кажется, задачу можно решить намного проще... Например так:
|
|||
|
51
Cube
16.06.14
✎
11:36
|
//Инициализация исходных данных
ВывестиСписокЗамен = Ложь; ДлинаМатериала = 6500; СписокЗаготовок = Новый СписокЗначений; СписокЗаготовок.Добавить(1300); СписокЗаготовок.Добавить(1300); СписокЗаготовок.Добавить(1200); СписокЗаготовок.Добавить(1200); СписокЗаготовок.Добавить(2080); СписокЗаготовок.Добавить(2080); СписокЗаготовок.Добавить(680); СписокЗаготовок.Добавить(680); СписокЗаготовок.Добавить(1300); СписокЗаготовок.Добавить(1300); СписокЗаготовок.Добавить(700); СписокЗаготовок.Добавить(700); КоличествоЗаготовок = СписокЗаготовок.Количество(); ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); //Составим матрицу раскроя МатрицаРаскроя = Новый ТаблицаЗначений; МатрицаРаскроя.Колонки.Добавить("ИтогоДлина"); Для НомерЗаготовки = 1 По КоличествоЗаготовок Цикл МатрицаРаскроя.Колонки.Добавить("ДлинаЗаготовки" + НомерЗаготовки); КонецЦикла; Для НомерЗаготовки = 1 По КоличествоЗаготовок Цикл ДлинаЗаготовки = СписокЗаготовок[НомерЗаготовки - 1].Значение; ЗаготовкаНЕРазмещена = Истина; Для Каждого СтрокаМатрицыРаскроя Из МатрицаРаскроя Цикл Если ДлинаМатериала - СтрокаМатрицыРаскроя.ИтогоДлина >= ДлинаЗаготовки Тогда СтрокаМатрицыРаскроя.ИтогоДлина = СтрокаМатрицыРаскроя.ИтогоДлина + ДлинаЗаготовки; СтрокаМатрицыРаскроя["ДлинаЗаготовки" + НомерЗаготовки] = ДлинаЗаготовки; ЗаготовкаНЕРазмещена = Ложь; Прервать; КонецЕсли; КонецЦикла; Если ЗаготовкаНЕРазмещена Тогда СтрокаМатрицыРаскроя = МатрицаРаскроя.Добавить(); СтрокаМатрицыРаскроя.ИтогоДлина = ДлинаЗаготовки; Для Сч = 1 По КоличествоЗаготовок Цикл СтрокаМатрицыРаскроя["ДлинаЗаготовки" + Сч] = ?(Сч = НомерЗаготовки, ДлинаЗаготовки, 0); КонецЦикла; КонецЕсли; КонецЦикла; //Выводим результат Сообщить("Вариант тупого перебора (" + Формат((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала) / 1000, "ЧДЦ=3; ЧН=") + " сек.)"); Для Каждого СтрокаМатрицыРаскроя Из МатрицаРаскроя Цикл ТекстСообщения = ""; Для НомерЗаготовки = 1 По КоличествоЗаготовок Цикл Если СтрокаМатрицыРаскроя["ДлинаЗаготовки" + НомерЗаготовки] = 0 Тогда Продолжить; КонецЕсли; ТекстСообщения = ТекстСообщения + ?(ПустаяСтрока(ТекстСообщения), "", " + ") + СтрокаМатрицыРаскроя["ДлинаЗаготовки" + НомерЗаготовки]; КонецЦикла; Сообщить(ТекстСообщения + ". Итого " + СтрокаМатрицыРаскроя.ИтогоДлина + ". Остаток " + (ДлинаМатериала - СтрокаМатрицыРаскроя.ИтогоДлина) + "."); КонецЦикла; ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); //Составим таблицу замен ТаблицаЗамен = Новый ТаблицаЗначений; ТаблицаЗамен.Колонки.Добавить("Разница"); ТаблицаЗамен.Колонки.Добавить("НомерЗаготовки"); ТаблицаЗамен.Колонки.Добавить("ДлинаЗаготовки"); ТаблицаЗамен.Колонки.Добавить("НомерЗаготовкиДляЗамены"); ТаблицаЗамен.Колонки.Добавить("ДлинаЗаготовкиДляЗамены"); Для НомерЗаготовки = 1 По КоличествоЗаготовок Цикл Для НомерЗаготовкиДляЗамены = 1 По КоличествоЗаготовок Цикл Если НомерЗаготовки = НомерЗаготовкиДляЗамены ИЛИ СписокЗаготовок[НомерЗаготовки - 1].Значение >= СписокЗаготовок[НомерЗаготовкиДляЗамены - 1].Значение Тогда Продолжить; Иначе СтрокаТаблицыЗамен = ТаблицаЗамен.Добавить(); СтрокаТаблицыЗамен.Разница = СписокЗаготовок[НомерЗаготовкиДляЗамены - 1].Значение - СписокЗаготовок[НомерЗаготовки - 1].Значение; СтрокаТаблицыЗамен.НомерЗаготовки = НомерЗаготовки; СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены = НомерЗаготовкиДляЗамены; КонецЕсли; КонецЦикла; КонецЦикла; //Производим перестановки заготовок Если ВывестиСписокЗамен Тогда Сообщить("Производимые замены (номер строки / номер колонки : значение):"); КонецЕсли; Для Каждого СтрокаМатрицыРаскроя Из МатрицаРаскроя Цикл Для Каждого СтрокаТаблицыЗамен Из ТаблицаЗамен Цикл Если СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки] <> 0 И СтрокаТаблицыЗамен.Разница <= ДлинаМатериала - СтрокаМатрицыРаскроя.ИтогоДлина Тогда НайденныеСтроки = МатрицаРаскроя.НайтиСтроки(Новый Структура("ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены, СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки] + СтрокаТаблицыЗамен.Разница)); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл Если МатрицаРаскроя.Индекс(НайденнаяСтрока) <= МатрицаРаскроя.Индекс(СтрокаМатрицыРаскроя) Тогда Продолжить; Иначе Если ВывестиСписокЗамен Тогда Сообщить("" + (МатрицаРаскроя.Индекс(СтрокаМатрицыРаскроя) + 1) + " / " + СтрокаТаблицыЗамен.НомерЗаготовки + " : " + СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки] + " -> " + (МатрицаРаскроя.Индекс(НайденнаяСтрока) + 1) + " / " + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены + " : " + НайденнаяСтрока["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены]); КонецЕсли; СтрокаМатрицыРаскроя.ИтогоДлина = СтрокаМатрицыРаскроя.ИтогоДлина + СтрокаТаблицыЗамен.Разница; НайденнаяСтрока.ИтогоДлина = НайденнаяСтрока.ИтогоДлина - СтрокаТаблицыЗамен.Разница; СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены] = НайденнаяСтрока["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены]; НайденнаяСтрока["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки] = СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки]; СтрокаМатрицыРаскроя["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовки] = 0; НайденнаяСтрока["ДлинаЗаготовки" + СтрокаТаблицыЗамен.НомерЗаготовкиДляЗамены] = 0; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; //Выводим результат Сообщить("Вариант после замен (" + Формат((ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала) / 1000, "ЧДЦ=3; ЧН=") + " сек.)"); Для Каждого СтрокаМатрицыРаскроя Из МатрицаРаскроя Цикл ТекстСообщения = ""; Для НомерЗаготовки = 1 По КоличествоЗаготовок Цикл Если СтрокаМатрицыРаскроя["ДлинаЗаготовки" + НомерЗаготовки] = 0 Тогда Продолжить; КонецЕсли; ТекстСообщения = ТекстСообщения + ?(ПустаяСтрока(ТекстСообщения), "", " + ") + СтрокаМатрицыРаскроя["ДлинаЗаготовки" + НомерЗаготовки]; КонецЦикла; Сообщить(ТекстСообщения + ". Итого " + СтрокаМатрицыРаскроя.ИтогоДлина + ". Остаток " + (ДлинаМатериала - СтрокаМатрицыРаскроя.ИтогоДлина) + "."); КонецЦикла; |
|||
|
52
Cube
16.06.14
✎
11:36
|
(51) Результат:
Вариант тупого перебора (0,000 сек.) 1 300 + 1 300 + 1 200 + 1 200 + 680 + 680. Итого 6 360. Остаток 140. 2 080 + 2 080 + 1 300 + 700. Итого 6 160. Остаток 340. 1 300 + 700. Итого 2 000. Остаток 4 500. Вариант после замен (0,016 сек.) 1 300 + 1 300 + 1 200 + 1 300 + 700 + 700. Итого 6 500. Остаток 0. 2 080 + 2 080 + 680 + 1 300. Итого 6 140. Остаток 360. 1 200 + 680. Итого 1 880. Остаток 4 620. |
|||
|
53
Cube
16.06.14
✎
11:37
|
+(21) Кстати, в (17) ещё ошибка: потерялась одна 680 и лишняя 1200
|
|||
|
54
Cube
16.06.14
✎
11:39
|
(51) Главное тут идея. Реализация добавлена для наглядности. Можно, конечно, и не один проход замен сделать, а несколько (добавить цикл и условие по желанию).
|
|||
|
55
Cube
16.06.14
✎
11:43
|
(52) Ах да, тест производился на файловой базе.
Платформа 8.2.19.90. ОС Win7 x86. CPU Intel Core2Quad Q8200. RAM 2,0 GB Винт обычный, 7200 RPM. RAID отсутствует. |
|||
|
56
Damage
16.06.14
✎
13:58
|
Полным перебором имхо никак. Решал подобную задачу, как раз для производства ПВХ, частичным перебором, сортируя детали по уменьшению длины. Оптимизация не идеальной получается, но итоговый процент отхода производство в целом устраивает.
|
|||
|
57
Drac0
16.06.14
✎
14:44
|
Симплекс метод.
|
|||
|
58
ILM
гуру
16.06.14
✎
15:01
|
Метод последовательного спуска гляньте.
|
|||
|
59
МихаилМ
16.06.14
✎
15:08
|
(58)
тогда уж градиентного . используется в модифицированном симплекс методе. |
|||
|
60
ILM
гуру
16.06.14
✎
16:43
|
(59) Много воды утекло. Теперь ещё штук 10 методов найти можно))
|
|||
|
61
Myst
17.06.14
✎
05:21
|
(56) ну у нас как бы начальство тоже устраивает текущий. А меня нет =D. да и хочется разобраться каким алгоритмом можно делать оптимизацию на большое количество заготовок в наиболее короткие сроки. Думаю подобная задача не последний раз.
|
|||
|
62
Damage
17.06.14
✎
06:13
|
(61) Да тут очень от размера партии зависит, и от размеров самих изделий. При нормальном раскладе, получается порядка 2% отход, на партии 20 изделий. Но если много одинаковых изделий "плохих" размеров, отход может вырасти и до 4-5% и никакой оптимизацией не исправишь
|
|||
|
63
Cube
17.06.14
✎
07:27
|
(61) Ты (51) смотрел?
|
|||
|
64
Klesk666
17.06.14
✎
07:41
|
(0) задача оптимального раскроя, в 1с не видел решений, если решишь можешь заработать много денег
а вообще почитай литературку по линейному программированию, может охота отпадет |
|||
|
65
Drac0
17.06.14
✎
10:49
|
(61) Тебе уже сказали, какими математическими инструментами это решается. Реализовать модифицированный симплекс метод на 1С не проблема.
|
|||
|
66
katc
17.06.14
✎
10:52
|
Забыл одну важную характеристику, при распиле необходимо учитывать длину реза и торцовку,
|
|||
|
67
МихаилМ
17.06.14
✎
11:19
|
(65) реализовать -не проблема,
проблема в медленно действии байт машины 1с8. |
|||
|
68
Drac0
17.06.14
✎
14:28
|
(67) Там мощности-то для симплекса нужно, смех да и только. В тетрадке задача сравнимой сложности прорешивается за полчаса вручную.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |