В настоящее время я занимаюсь проектом по оптимизации производственного процесса, и я столкнулся с проблемой:
У меня есть 4 вида продуктов (A, B, C и D) в 3 разных цветах (зеленый, синий, желтый) и получить заказ с датой доставки, когда клиенту это нужно до.Например, посмотрите на эту таблицу для лучшего обзора:
Product Needs it till Date Colour
A 01.03.2018 Green
A 15.03.2018 Blue
B 12.03.2018 Yellow
C 17.03.2018 Blue
B 15.03.2018 Blue
A 18.03.2018 Green
D 07.03.2018 Yellow
B 21.03.2018 Green
C 23.03.2018 Yellow
D 03.03.2018 Blue
C 05.03.2018 Yellow
B 17.03.2018 Blue
... ... ...
Я могу производить максимум 3 продукта в день и только один из A, B или D и два из C одновременно.Например, в определенный день я могу произвести (A, B, C) или (A, C, D) или (C, C, D) и т. Д., Но НЕ (A, A, C) или (B, D)., D) и т. Д.
Сначала я сортирую столбцы в соответствии с датой поставки, чтобы продукт мог быть произведен в срок, когда это необходимо клиенту.
Затем я бынужно пересортировать строки, чтобы внести наименьшее количество изменений цвета в непрерывном долгосрочном периоде,
Теперь наступает интересная часть, я хотел бы создать план производства.Для этого мне нужно создать группы макс.3 рядаОднако цель состоит в том, чтобы отсортировать и сгруппировать их таким образом, чтобы у нас было наименьшее количество для изменений цвета в длительной долгосрочной перспективе (и, конечно, с учетом даты, когда клиенту это необходимо).
Например,
Плохо: (желтый, зеленый, синий), (зеленый, желтый, желтый), (синий, зеленый, зеленый) и т. Д. Оптимально: (зеленый, зеленый, синий), (синий, синий, желтый), (желтый, желтый, синий) и т. д.
Я начал с основ - нашел библиотеку, которая может мне помочь, - это панды.Я сортирую значения сначала по дате, а затем по цвету.
import pandas as pd
df = pd.read_excel('unsorted_orders.xlsx')
df = df.sort_values(['date', 'colour'])
Мне удалось выяснить, как сгруппировать их в списки из 3 строк:
grouped = df
maxproduction = 3
grouped = [grouped[n:n+maxproduction] for n in range(0, len(grouped), maxproduction)]
print(grouped)
, но я совершенно заблудился относительно других задач, а именно:
Производите A, B, D только один раз в определенный день и позволяйте C находиться в производственном дне дважды (при необходимости).
, чтобы сгруппировать их по наименьшему количеству изменений цвета в непрерывном долгосрочном периоде с учетом даты.
Я изучил PuLP, но, возможно, это не оптимальная библиотека.Может ли кто-нибудь намекнуть, куда я могу заглянуть?