Алгоритм выдачи доставки - PullRequest
1 голос
/ 24 августа 2010

Мне нужно получить унаследованный класс 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, где key - уникальный идентификатор набора номиналов, а value - количество номиналов, необходимое для оплаты.

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

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

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 Ответ

2 голосов
/ 25 августа 2010

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

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

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

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

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

...