проще простого - добавляем в задачу еще одно условие, на количество продукта.
я сейчас погонял задачу на разных данных, метод градиентного спуска все же плоховато с ней справляется, иногда по 100 и более итераций производит - это безобразие
я сейчас думаю как лучше оптимизировать функцию полезности. проще всего сделать её линейной, и оптимизировать симплекс-методом, но тогда не понятно как избегать того чтобы чел покупал что-либо кроме товара имеющего лучшее соотношение качество/цена. то есть предельная полезность из-за линейности функции получается неизменной. в общем, я пока подумаю еще. у кого будут идеи - высказывайтесь.
сейчас предельная полезность меняется: чем больше куплено товара какого-то вида - тем меньше субъективной пользы от покупки еще одной его единицы. поэтому для максимизации субъективной выгоды человек стремится покупать несколько разных товаров вместо какого-то одного. кроме того вычисляется полезность для общего кол-ва еды - максимальная полезность от кол-ва имеет максимум при сумме количества продовольствия равной единице. Кроме этого должны действовать ограничения на сумму затрат потребителя и на наличное количество товара.
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
Это все хорошо и интересно.
Но меня с ходу интересуют возможные оптимизации подобного алгоритма.
Можно его оформить в виде выборки из таблицы например?
Чтобы не пересчитывать каждый раз
А то ведь в игре понадобится куча и других алгоритмов.
Мы не можем отдать кучу процессорного времени под обсчет функций полезности.
это понятно и естественно что чем быстрее будет работать алгоритм - тем лучше. вопрос в том как этого достичь. с одной стороны нам нужен реализм а с другой производительность. вопрос в том как совместить одно с другим. сделать более логически адекватную модель, более интересную и интуитивно понятную с одной стороны и не переборщить с вычислениями - с другой.
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Finansist's sworn brother * 25.7.2009, 20:47) [snapback]297314[/snapback]</div>Дык вся соль предложения в том, что предпочтения человека зависят от его финансового положения, т.е. мы здесь не знаем их заранее.Все расчеты нужно сделать заранее, а в готовую игру подставлять уже полученные значения, например, в виде матрицы.
[/b]
Примерно то, что ты предлагаешь, изначально было в "Выселках" - там предполагалось, что список потребностей человека однозначно определяется его уровнем богатства (например, нищий ест только дешевую еду (куда относятся товары картошка и хлеб), середняк - дешёвую и хорошую (сыр, мясо, рыба) еду, богач - дешёвую, хорошую и изысканную (специи, кофе, сахар) еду. Это довольно грубое описание реала, но, действительно, довольно быстро считающееся.
Сейчас, как я понимаю, этот расклад рассматривается как запасной, аварийный вариант, на случай если Петеру не удастся совладать с производительностью своей модели
//вопрос в том как совместить одно с другим. сделать более логически адекватную модель
тут еще та проблема, что модель должна быть цельной, охватывать весь геймплей и давать тот ответ а насколько это будет играбельно.
покамест такого нет, на сколько я вижу, есть достаточно детальные, но разрозненые части модели, которые не понятно как сливать вместе.
потому я и повторяю постоянно, о необходимости общения в режиме онлайн конференции. ИМХО, только таким способом можно адекватно обсудить и объеденить разношерстные наши представления...
нужно будет собрать собрание скажем во второй половине недели. пока все ставим скайп и учимся с ним управляться. обсуждать будем архитектуру игры.
зы: почему же не понятно как сливать?
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
Насчет спроса: в потребительской функции заменил нелинейные ограничения на линейные, соответственно градиентный метод на симплекс-метод. На 4х товарах расчет выполняется в 1000-1500 раз быстрее. чем больше число товаров, тем больше будет выигрыш в производительности.
Потребительская функция задается следующим образом:
k1*x1 + k2*x2 + ... + kn*xn -> max
Summ(p1*x1..pn*xn) <= M
Summ(xf) = 1
x1..n - товары
k1..n - коэффициенты полезности (выражают субъективную ценность товара для потребителя)
p1..pn - цены на товары
xf - продукты питания, подмножество x1..n
M - наличные средства
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Peter * 27.7.2009, 11:17) [snapback]297422[/snapback]</div>На этой неделе точно не смогу, в лучшем случае на следующей (если на работе все будет гладко).нужно будет собрать собрание скажем во второй половине недели. пока все ставим скайп и учимся с ним управляться. обсуждать будем архитектуру игры.
[/b]
<div class='quotetop'>Цитата(Dr Gobbels * 27.7.2009, 12:18) [snapback]297429[/snapback]</div>сейчас оформлю там всё, и выложу.
ЗЫ: а можно исходники посмотреть?
[/b]
<div class='quotetop'>Цитата(Finansist's sworn brother * 27.7.2009, 12:58) [snapback]297438[/snapback]</div>а после работы? из дома скажем вечером между 8 и 10 по москвеНа этой неделе точно не смогу, в лучшем случае на следующей (если на работе все будет гладко).
[/b]
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Peter * 27.7.2009, 20:05) [snapback]297463[/snapback]</div>у меня интернет повременной дома. Большая разница тратить чужие деньги (причем по безлимитке) на работе или тратить свои дома Обсуждайте пока без меня, потом присоединюсь. Или выложите здесь, до чего договорились.а после работы? из дома скажем вечером между 8 и 10 по москве
[/b]
Привет!
Предлагаю вернуться к обсуждению концепции спроса. Я тут на прошлой неделе пробовал и так и эдак исхитриться, но что-то концепция не клеится. нужны свежие идеи!
для начала опишем то как это сейчас реализовано в концепции Гоббельса:
1. Есть производители различных товаров, каждый товар имеет некоторую фиксированную цену, на которые могут быть назначены надбавки (см. ниже).
2. На рынке соответственно присутствуют товары по разным ценам в различных количествах. На каждый тип товара имеется только одна цена, то есть нет такого что продают к примеру 5 носков по 20 рублей и 10 носков по 15.
3. Каждый ход потребитель определяет, какие товары он будет покупать. У потребителя имеются потребности. Они могут быть удовлетворены путем потребления соответствующих товаров.
Расмотрим потребность в пище ("пища"). Эту потребность удовлетворяют к примеру товары "мясо" и "хлеб", имеющиеся на рынке. Потребитель покупает равные количества мяса и хлеба (в сумме единица). То есть потребитель для удовлетворения каждой потребности покупает определенное суммарное количество альтернативных товаров удовлетворяющих данную потребность в равных пропорциях.
4. если какого-то товара не хватает на всех, возникает надбавка к его стоимости. механизм этот недостаточно хорошо продуман т.к. существующий код вызывает различные парадоксы вроде обогощающихся и одновременно мрущих от голода собирателей (парадокс собирателей).
Какую модель потребления предлагал я:
1. Все виды товаров имеют различную привлекательность (потребительную стоимость, ПС) в глазах потребителя. ПС одного товара может быть разной для различных людей.
2. Потребитель распределяет имеющиеся у него средства между имеющимися на рынке товарами согласно потребительской функции ПФ, определяющей количества приобретаемых товаров в зависимости от их ПС и стоимостей (меновая стоимость, МС).
Как это реализовать с технической точки зрения?
Вариант 1.
Каждый товар описывается тремя характеристиками:
1. Цена (за абстрактную единицу товара, для продуктов питания например единица товара это такое его количество, которым может полностью удовлетворить свою потребность в пище человек в течение одного хода).
2. Привлекательность - число характеризующее потребительскую стоимость данного товара в глазах покупателя.
3. Насыщение - число, определяющее порог насыщения. При покупке товара в количестве, превышающем данное значение, его удельная привлекательность становится отрицательной.
Механизм привлекательность/насыщение иллюстрирует закон убывающей полезности (см. википедию). Графически потребительскую функцию товара можно представить как параболу, ветви которой направлены вниз, левая ветвь проходит через точку (0,0), вершина находится в точке (Насыщение,Привлекательность). По оси абсцисс откладывается соответственно количество купленного товара, по оси ординат - субъективная полезность данного количества товара.
Полная ПФ покупателя - это сумма ПФ по отдельным товарам плюс штрафные слагаемые (например значение ПФ сильно уменьшается если сумма количеств покупаемой пищи меньше единицы).
Определение затрат потребителя на различные товары осуществляется путем оптимизации ПФ. В моей демонстрационной программе оптимизация осуществляется методом градиентного спуска.
Недостатки данного варианта состоят в том, что он демонстрирует невысокую производительность. Мы с Гоббельсом прикинули, что ее будет недостаточно. Больше недостатков вроде нет. Возможно этот вариант можно будет реализовать с помощью квадратичного программирования, но я в этом разделе математики не силен. Попробую достать литературу по данному вопросу.
Второй вариант - для определения количественных характеристик спроса использовать аппарат линейного программирования (симплекс-метод).
Кардинальное отличие состоит в том, что в данной модели должны использоваться только линейные параметры и ограничения на них, опять же линейные. То есть геометрически от парабол и гиперповерхностей мы переходим к отрезкам прямых и многогранникам.
В этом случае невозможно сформулировать закон убывающей полезности - человек будет стремиться затариться под завязку самым выгодным товаром по соотношению цена/качество, проигнорировав все остальные товары. В реальности я думаю мало кто питается одними только батонами к примеру.
Выход состоит в том, чтобы ввести еще одну абстракцию над товарами - "потребительские корзины", ПК. в этом случае спрос определяется следующим образом:
1. Разбиваем все товары на группы по их стоимости, к примеру: дешевые, средние, дорогие.
2. Составляем типовые наборы товаров: минимальный - состоящий из одного, самого дешевого продукта (например картошка); экономный - состоящий из продуктов различных типов, при этом для каждого типа (мясные, молочные, овощи, фрукты) выбираются самые дешевые товары (например: рыба, молоко, картошка, бананы); сбалансированный - то же что и предыдущая ПК, но вмето самых дешевых товаров выбираются соответствующие товары скажем первых двух ценовых категорий в равных пропорциях (например: рыба/баранина, молоко/творог, картошка/капуста/морковка, бананы/апельсины); разнообразный - выбираются товары из всех ценовых категорий.
3. Далее определяем сумму, которую человек тратит на питание. Она равна стоимости единицы самого дешевого продукта + надбавка. Надбавка зависит от менталитета.
4. Далее составляем симплекс-таблицу и находим решение. Типовое решение будет состоять из товаров двух различных ПК, в сумме - единица: более дорогой и более дешевой корзины. Например, 30% сбалансированной корзины и 70% экономной. Если расходы на еду превышают стоимость самой дорогой корзины, тогда потребитель покупает единицу данной корзины. Если денег недостаточно - единицу или меньше самой дешевой корзины (однопродуктовой).
Вариант 2 сейчас работает примерно в 1000 раз быстрее. Но с ним возможны проблемы. Сейчас я занимаюсь его доведением до ума и сообщу когда демонстрационная программа будет готова.
Прошу высказываться.
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
ps: у меня на работе новая аська, 156665975
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата</div>Здесь речь идет об одном товаре? Как будет осуществляться выбор между разными товарами?Механизм привлекательность/насыщение иллюстрирует закон убывающей полезности (см. википедию). Графически потребительскую функцию товара можно представить как параболу, ветви которой направлены вниз, левая ветвь проходит через точку (0,0), вершина находится в точке (Насыщение,Привлекательность). По оси абсцисс откладывается соответственно количество купленного товара, по оси ординат - субъективная полезность данного количества товара.
[/b]
У меня была такая идея. Есть население, различное по возрасту, по полу и по благосостоянию. Задаем стандартные потребности для одного стандартного человека. потребности населения (а именно определенной группы) связываем процентным соотношением с потребностями стандартного человека. Если потребности по определенному товару полностью удовлетворяются и остается остаток товара, то цена на него падает (но его можно продать соседям, если он им нужен). Наоборот, если потребности полностью не удовлетворяются, что цена на товар растет. Соотношение привлекательность/насыщение уже неявно заложена в потребности определенной группы людей (пол, возраст, благосостояние).
<div class='quotetop'>Цитата(der Blutsbruder des Finanzieres * 10.8.2009, 10:31) [snapback]299245[/snapback]</div>путем оптимизации функции полезности, написано жеЗдесь речь идет об одном товаре? Как будет осуществляться выбор между разными товарами?[/b]
<div class='quotetop'>Цитата(der Blutsbruder des Finanzieres * 10.8.2009, 10:31) [snapback]299245[/snapback]</div>можно поподробнее? можно без пола и возраста, только благосостояние.У меня была такая идея. Есть население, различное по возрасту, по полу и по благосостоянию. Задаем стандартные потребности для одного стандартного человека. потребности населения (а именно определенной группы) связываем процентным соотношением с потребностями стандартного человека.
[/b]
что такое стандартные потребности? фиксированные? 1 булочка 1 бивидок? или как
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата</div>Группы благосостояния: отребье, нищие, бедные, средняки, зажиточные, состоятельные, богачи.можно поподробнее? можно без пола и возраста, только благосостояние.
что такое стандартные потребности? фиксированные? 1 булочка 1 бивидок? или как[/b]
Потребности отребья: плохая пища, лохмотья и ... ну не знаю еще что, палка чтобы собак отгонять.
...
Потребности средняка: средняя пища, средняя одежда и в таком роде.
...
Потребности богача: дорогая пища, дорогая одежда, предметы роскоши, дорогие украшения и т.п.
<div class='quotetop'>Цитата(der Blutsbruder des Finanzieres * 10.8.2009, 10:59) [snapback]299254[/snapback]</div>ну так бы и написал, "как в модели Гоббельса"Группы благосостояния: отребье, нищие, бедные, средняки, зажиточные, состоятельные, богачи.
Потребности отребья: плохая пища, лохмотья и ... ну не знаю еще что, палка чтобы собак отгонять.
...
Потребности средняка: средняя пища, средняя одежда и в таком роде.
...
Потребности богача: дорогая пища, дорогая одежда, предметы роскоши, дорогие украшения и т.п.
[/b]
этот подход имеет множество минусов
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III