Как переставить строки (исходя из условия), а затем сгруппировать их в ограниченные списки из 5 элементов с целью минимального количества групп? - PullRequest
0 голосов
/ 10 апреля 2019

В настоящее время я занимаюсь проектом по оптимизации производственного процесса, и я столкнулся с проблемой:

У меня есть 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, но, возможно, это не оптимальная библиотека.Может ли кто-нибудь намекнуть, куда я могу заглянуть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...