Алгоритм выдачи доставки

Мне нужно получить унаследованный класс от DispenseAlgorithm. Он должен реализовать алгоритм расчета выдачи доставки. Алгоритм должен обеспечивать равномерное номинальное потребление.

public abstract class DispenseAlgorithm
{
       public abstract Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ);
}

public class CassetteData
{
       public int UID { get; set; }
       public int Nominal { get; set; }
       public int Count { get; set; }

       public CassetteData() { }
}

Класс CassetteData - предоставляет информацию о наборе номиналов на текущий момент времени (Nominal - значение номинала, Count - количество номиналов, UID - уникальный идентификатор набора достоинств).

Метод CalculateDispense имеет 2 параметра: - доступный на текущий момент набор номиналов (данные CassetteData {]) - сумма, которую мы выплачиваем (или отдаем) в качестве кэшбэка.

Метод CalculateDispense должен возвращать объект Dictionary, где ключ - уникальный идентификатор набора достоинств, а значение - количество купюр, необходимое для оплаты.

Желаемый результат: номинал должен заканчиваться как можно более равномерно на некоторых сессиях выдача доставки

Например: У нас есть наборы номиналов:

1        10 $                100 denomination
2        50 $                 100 denomination
3        100 $         100 denomination

Нам нужно выплатить 800 $

Хороший результат:

1     5 items 
2     5 items 
3     5 items

Потому что 800 = 10 * 5 + 50 * 5 + 100 * 5

Плохой результат:

1        0 items 
2        0 items 
3        8 items

Потому что 800 = 10 * 0 + 50 * 0 + 100 * 8

Номинал это означает деньги, банкноту, вырезку, банкноту, облигацию

выпуск поставки означает выпуск кэшбэка

Номинал - номинал, номинальная стоимость, номинальная стоимость, номинальная стоимость, рейтинг

1
задан 25 August 2010 в 15:22
поделиться

1 ответ

Если я правильно понял ваш вопрос, вы ищете алогритм, который говорит для набора целых чисел Y, как я могу получить значение x, такое что x = a1 * y1 + a2 * y2 + a3 * y3 +. .. где y1, y2, y3, ... - элементы Y, а a1, a2, a3, ... - целые числа с минимальным интервалом, или, скорее, как можно более "четные".

Если это верно, то вам нужно определить, как вы измеряете лучший результат с точки зрения «а». Вы упоминаете, что у вас есть фиксированный пул каждой ноты, и поэтому вы хотите попытаться сохранить уровни как можно более равными, но как вы измеряете «лучший» конечный результат?

В качестве отправной точки i Я бы предложил просмотреть этот вопрос и ответы на него, поскольку они кажутся именно тем, что вам нужно, за исключением оговорки, что вам также необходимо поддерживать уровни деноминации.

Вы также можете рассмотреть вопрос о линейном программировании, поскольку это кажется проблемой, которую можно выразить в такой форме и решить соответствующим образом. Максимизация и минимизация ценностей при работе с набором ограничений - вот что это все, поэтому вполне может быть чем-то, что могло бы вам помочь.

Надеюсь, это послужит отправной точкой для решения вашей проблемы

2
ответ дан 2 September 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: