объектную модель для реализации траншей, как? - PullRequest
1 голос
/ 02 февраля 2012

Я ищу любые идеи о том, как реализовать транши в объектно-ориентированном программировании, например, в Python.

Я приведу простой пример того, чего я пытаюсь достичь.

Завод выпускает карандаши.Ежемесячная выработка варьируется.Карандаши идентичны и имеют рыночную цену.Рыночная цена варьируется.Агенты A, B и C относятся к старшему траншу.Агент А по контракту обязан купить половину продукции, до общего объема 1000 карандашей по фиксированной цене 4 евро. Аналогичным образом, агенты В и С обязаны по контракту покупать четверть каждого производства до общего объема.по 500 карандашей каждый по фиксированной цене 5 евро. Кроме того, агент А имеет возможность купить дополнительно 1000 карандашей по цене исполнения 5 евро по своему усмотрению.Агент D принадлежит младшему траншу.Агент D может по своему усмотрению купить 5000 карандашей из того, что осталось от старшего транша, по цене исполнения 3 евро.

Мой вопрос, учитывая два вектора, по 24 элемента, объемов производства.и рыночные цены, сколько карандашей покупает агент D?

Как я понимаю, проблема в том, как связать различные объекты типа агента и как заставить карандаши течь через эту «сеть»Агенты, так что каждый Агент захватывает все, на что тот Агент обязан / имеет право, и передает нежелательных агентов следующему Агенту / группе Агентов.Проблема в том, что в каждом транше может быть несколько агентов.

1 Ответ

1 голос
/ 02 февраля 2012

Я думаю, что ваш вопрос немного двусмысленный, но я постараюсь!Насколько я понимаю, вы начинаете с некоторого числа n карандашей по рыночной цене p.

  1. Вы продаете a:=min(n//2,1000) из них агенту А по 4 евро.
  2. Вы продаете b:=min(n//4,1000) из них агенту Б по 5 евро.
  3. Выпродайте c:=min(n//4,1000) из них агенту C по 5 евро.
  4. Вы спрашиваете агента A, хочет ли она какой-либо из оставшихся карандашей;она покупает a' <= min(n-a-b-c,1000) из них за 5 евро.
  5. Вы спрашиваете агента D, хочет ли она какой-либо из оставшихся карандашей;она покупает d <= min(n-a-b-c-a',5000) из них за 3 евро.

(Я не понимаю, почему у вас есть 24-элементные векторы. Это более двух лет или что-то? Я также сделал предположение о порядке- если вы спросите агентов A и D одновременно, хотят ли они некоторые из оставшихся карандашей, они оба могут попросить их!)


Первые три шага полностью определяются вашим контрактом;агенты не имеют права голоса в этом вопросе.Их легко вычислить, поэтому все, что вам нужно сделать, - это настроить способ спросить агентов, сколько карандашей они хотят, когда у них есть выбор.

Чтобы сделать это, я бы предположил, что у вас есть Agent объектов с query методом.Вы бы позвонили

agent.query(number_of_pencils_remaining, maximum_buyable, market_price)

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

Имеет ли это смысл?


Впсевдокод:

class Agent(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def query(number_of_pencils_remaining, maximum_buyable, market_price):
        return 0

for price, volume in zip(...,...):
    sell(quantity=min(volume//2, 1000), to=A, price=4)
    sell(quantity=min(volume//4, 1000), to=B, price=5)
    sell(quantity=min(volume//4, 1000), to=C, price=5)

    sell(quantity=A.query(...), to=A, price=5)
    sell(quantity=D.query(...), to=D, price=3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...