У меня в голове есть грубая концепция торговой игры, и я не могу понять, что кажется элементарной математикой.
В моих городах/космических станциях/торговых постах действуют следующие правила:
Итак, идея состоит в том, что если X производит меньше еды, чем потребляет, то со временем цена на еду растет, а когда она почти пуста, она взлетает до небес. В то время как Y является нетто-производителем, и цена со временем падает. Это создает торговую возможность Y -> X, прибыльность которой зависит от того, сколько людей проходит по маршруту — если много людей торгуют Y -> X, тогда цены уравниваются.
Чтобы гарантировать, что игроки не вступят в тайный сговор, чтобы накопить еду за пределами X, ожидая, пока цены поднимутся, а затем продавая, торговцы NPC будут использовать самые прибыльные торговые маршруты, чтобы удерживать разницу в ценах и спрос в разумных пределах.
Я думал о размерах хранилищ и о том, как могут колебаться цены, но каждая формула, которую я придумал, не проходит несколько простых тестов. Например, если общее хранилище X составляет 1000 единиц, когда игрок приходит, он может просто купить 500, дождаться роста цены, а затем снова продать - прибыль. Очевидно, это не должно работать.
Я попробовал несколько поисков в Google, здесь и в Gamasutra, и хотя я нашел некоторые идеи, я не нашел того, что, как мне кажется, должно быть простой формулой.
Взимать плату за перемещение предметов на склад и из него.
Взимать комиссию за каждую транзакцию.
На самом деле люди предлагают разные цены на вещи. Если у вас есть 50 единиц А, за которые вы заплатили 1000, вы не хотите продавать 10 за 100 — вы теряете деньги. Но если вы заплатили 100 за 15 штук, то с удовольствием возьмете 100 за 10. В любом случае, если у каждого продавца разная минимальная приемлемая цена, то и итоговая цена разная. Таким образом, если вы покупаете 500 единиц, цена выше, чем если вы покупаете 5 единиц. Потому что вы платите цену 5 единиц за первые 5 единиц, а затем более высокие цены за большее количество единиц.
Вы можете заставить это работать либо с помощью for
цикла с функцией ценообразования, где вы оцениваете каждую единицу по отдельности, либо вы можете усреднить цены. Петля более гибкая и точная, но средняя проще.
Price(500 of 1000) = 500 * (Price(at 1000) + Price(at 500)) / 2
или в более общем смысле
Это будет работать лучше всего, если ваша ценовая функция является линейной. Если это что-то другое, вам может понадобиться более сложная математика, чем простое среднее арифметическое.
Вы покупаете и продаете владельцам складов. Они не хотят продавать вам по тем же ценам, по которым покупают. Поэтому они покупают по одной цене, а продают по другой. Разница составляет их маржу или прибыль. Поэтому создайте коэффициент маржи, например, 1,1. Разделите цену продажи на коэффициент маржи, чтобы получить цену покупки, или умножьте цену покупки на коэффициент маржи, чтобы получить цену продажи.
Если вы покупаете, а затем сразу же продаете что-либо, вы всегда будете терять деньги таким образом.
То, что вы описываете, является ключевой реальностью бизнеса. Если вы готовы держаться за правильный инвентарь, вы получаете прибыль. То, что вы описываете, похоже на то, что называется «загнать рынок в угол». Вы скупаете весь рынок, ждете, когда спрос взлетит до небес, а затем получаете прибыль. Даже если вы не полностью захватили рынок, вам платят за ваши усилия!
Настоящий вопрос заключается в том, что делает город, когда Игрок с денежными мешками приходит в город и пытается скупить половину еды. Что это значит для каждого жителя города? Они продают продукты, которые им нужны на зиму? Если это так, цены могут резко возрасти, когда начнет падать снег. Или продают излишки, которые иначе бы сгнили?
«Например, если общее хранилище X составляет 1000 единиц, когда игрок прибывает, он может просто купить 500 единиц, дождаться роста цены, а затем снова продать — получить прибыль. Очевидно, что это не должно работать».
Эта часть вашего вопроса кажется довольно простой:
1) Цена, когда игрок приходит, является равновесной ценой, когда есть 1000 единиц. Если он покупает 1 единицу, должна быть рассчитана новая равновесная цена. Если он попытается купить 500 единиц, то повторите эту процедуру 500 раз, каждая единица все дороже и дороже. (Я знаю, что очень интенсивное использование процессора, может попробовать каждые 10 единиц или около того) [Я не знаю, каковы ваши исходные формулы для расчета равновесной цены, поэтому я не могу внести коррективы каким-либо разумным образом]
2) Меньшая процессороемкость - на рынке в любой момент находится только часть предлагаемого товара - скажем 1/20. Это максимальная сумма, которую игрок может купить за любой ход — следующий ход, следующая цена.
Сложность в том, что не существует простой формулы хорошего алгоритма накопления вещей для следующих ходов города. Все это основано на ожиданиях и предвосхищении действий других агентов.
(хотите ужасный, простой?)
Зксирра
Том
Сноулокк
Том
Джо Блоггс