Мне нужно получить унаследованный класс от 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
Номинал это означает деньги, банкноту, вырезку, банкноту, облигацию
выпуск поставки означает выпуск кэшбэка
Номинал - номинал, номинальная стоимость, номинальная стоимость, номинальная стоимость, рейтинг
Если я правильно понял ваш вопрос, вы ищете алогритм, который говорит для набора целых чисел Y, как я могу получить значение x, такое что x = a1 * y1 + a2 * y2 + a3 * y3 +. .. где y1, y2, y3, ... - элементы Y, а a1, a2, a3, ... - целые числа с минимальным интервалом, или, скорее, как можно более "четные".
Если это верно, то вам нужно определить, как вы измеряете лучший результат с точки зрения «а». Вы упоминаете, что у вас есть фиксированный пул каждой ноты, и поэтому вы хотите попытаться сохранить уровни как можно более равными, но как вы измеряете «лучший» конечный результат?
В качестве отправной точки i Я бы предложил просмотреть этот вопрос и ответы на него, поскольку они кажутся именно тем, что вам нужно, за исключением оговорки, что вам также необходимо поддерживать уровни деноминации.
Вы также можете рассмотреть вопрос о линейном программировании, поскольку это кажется проблемой, которую можно выразить в такой форме и решить соответствующим образом. Максимизация и минимизация ценностей при работе с набором ограничений - вот что это все, поэтому вполне может быть чем-то, что могло бы вам помочь.
Надеюсь, это послужит отправной точкой для решения вашей проблемы