Первый  неофициальный  сайт  Elite 2000 |
||||||||||
|
ДАННАЯ ЭКОНОМИЧЕСКАЯ МОДЕЛЬ НАПИСАНА ПИЛОТОМ VICONT И НЕ ЯВЛЯЕТСЯ ОКОНЧАТЕЛЬНОЙ, РАВНО КАК И ЕДИНСТВЕННОЙ о как сказанул! ;) Price_Post (Цена поставщика) Price_Min (Минимальная цена на данный товар из таблицы) Price_Max (Максимальная цена на данный товар из таблицы) Price_Delta
(Price_Max - Price_Min) Price_Change_Speed ( Скорость изменения цены) Price_Last (Последняя цена на данный товар) Price_Potr (Цена которая получится у потребителя при
потреблении товара у данного поставщика ) Price_Aver (Средняя арифм.цена которая получится у
потребителя по данному товару) Storage_Size (Размер Склада данной планеты на данный товар
из таблицы) Storage_Val (Количество товара на складе в начале игры =
половине от Storage_Size ) Time_Last_Calc ( Игровое время когда проводился последний
обсчет) Time_Current ( Текущее игровое время) Time_Delta
(Разница между Time_Current и Time_Last_Calc ) Product_Speed (Скорость производства данного товара) Product_Speed_Min (минимальная Скорость производства данного
товара) Product_Speed_Max (максимальная Скорость производства
данного товара) Product_Speed_Delta
(Product_Speed_Max - Product_Speed_Min) Product_Need (количество данного товара необходимого данной
планете) Product_W (Масса данного товара из таблицы, для товаров , и
так , исчисляемых по массе установить равным 1) Product_Pot (Потенциальное потребление данного товара на
данной планете) Product_Post (Поставщик данного товара) Product_Potr (Потребитель данного товара) Tech_Level (Коэффициент технического уровня данной планеты
из таблицы) Tech_Level_Max (Максимальный коэффициент технического уровня
планеты из таблицы) Climat_Level (Коэффициент Климата данной планеты из таблицы) Mineral_Level (Коэффициент Минералов данной планеты из
таблицы) Factory_Max (Максимальное количество фабрик на данной
планете из таблицы должно быть четным) Factory_Val (текущее Количество фабрик данной планеты для
начала = половине Factory_Max) Factory_Dev (Производительность 1=ой фабрики данного товара
из таблицы) Factory_KR
(коэффициент от 0 до 0.5 характеризующий количество фабрик от максимального для данной планеты, которое будет открыто или
закрыто Корректором Рынка) Factory_Close(Количество фабрик подлежащих закрытию) Factory_Open(Количество необходимых новых фабрик) KR
(Коэффициент от 0 до 0.5 характеризующий когда вступает в игру Корректор Рынка подбирать методом научного тыка) KRange (Коэффициент от 0 до (методом научного
тыка) характеризующий издержки при доставке товара, т.е. увеличивающий цену одной
единицы массы товара за 1 единицу расстояния) KRisс_Post
(Коэффициент от 0 до (методом научного тыка) характеризующий риск при доставке от данного поставщика) KRisс_Potr
(Коэффициент от 0 до (методом научного тыка) характеризующий риск при доставке к данному потребителю) Postav_Dist (Расстояние от данного потребителя до данного
поставщика (придется вычислять самим) Nas (Население
данной планеты из таблицы) Nas_Max (Максимально
возможное население для данной планеты из таблицы) KPotr (Коэффициент от 0 до (методом научного
тыка) характеризующий расход данного товара на душу населения) KPotreb (Коэффициент от 0 до (методом научного
тыка) характеризующий необходимость данного товара для дальнейшего роста
населения) KTechPotr
(Коэффициент от 0 до (методом научного тыка) характеризующий изменение расхода данного товара на душу населения в
зависимости от ее тех. уровня) KFactPotr
(Коэффициент от 0 до (методом научного тыка) характеризующий расход данного товара на 1 работающую на данной планете
фабрику) KSebe
(Коэффициент от 0 до 1 характеризующий себестоимость производства данного товара на данной планете зависит от
климата для сельхоз продуктов и от наличия минералов или их удаленности
для индустриальных) Product (Индекс данного товара) Spros_Udov
(Удовлетворенность спроса на продукты, если этот показатель больше Spros_Need то население растет) Spros_Need (Необходимый
уровень удовлетворенности спроса для дальнейшего роста населения) Money (Деньги
затраченные данным поставщиком на приобретение данного товара) При старте игры Инициализируем 10 Запускаем Этап 1-ый 10 инициализируем Price_Post
для каждой планеты поставщика. Предлагаю проставлять средние значения 20 в цикле для каждого товара: Price_Last(Product) =
Price_Post(Product) 30 Time_Last_Calc = 0 ( или кидаем сюда значение игрового
времени на начало игры.) 40 KR=0.05 (Надо подбирать) 50 Factory_KR = 0.1 (Надо подбирать) 60 в цикле для каждого индустриального товара:
Product_Speed_Min(Product) =
(2^Tech_Level_Min) * (2^Mineral_Level_Min) = (2^1)*(2^1)=4 70 в цикле для каждого индустриального товара:
Product_Speed_Max(Product) =
(2^Tech_Level_Max) * (2^Mineral_Level_Max) 80 в цикле для каждого сельхоз товара:
Product_Speed_Min(Product) = (2^Tech_Level_Min)
* (2^Climat_Level_Min) * Factory_Dev(Product)= (2^1)*(2^1)*1*Factory_Dev(Product)=4*Factory_Dev(Product) 90 в цикле для каждого сельхоз товара:
Product_Speed_Max(Product) = (2^Tech_Level_Max)
* (2^Climat_Level_Max) * Factory_Dev(Product) 100 в цикле для каждого товара: Product_Speed_Delta(Product)
= Product_Speed_Max(Product)
- Product_Speed_Min(Product) 60 в цикле для каждого товара: Price_Delta =
Price_Max(Product) - Price_Min(Product) Сам обсчет Этап 0-вой Инициализация 10
Product_Pot =0 Этап 1-ый инициализация 5
Time_Delta = Time_Current - Time_Last_Calc:Time_Last_Calc=Time_Current #Для начала требуется вычислить сколько товаров было
произведено планетами поставщиками за истекший промежуток времени #для индустриальных товаров 10
Product_Speed(Product_Post,Product) = Tech_Level(Product_Post) * Mineral_Level(Product_Post)
* Factory_Val(Product_Post,Product) * Factory_Dev(Product_Post,Product) #для сельхоз товаров заменим Mineral_Level(Product_Post)
на Climat_Level(Product_Post) и получим 10
Product_Speed(Product_Post,Product) = Tech_Level(Product_Post) * Climat_Level(Product_Post)
* Factory_Val(Product_Post,Product) * Factory_Dev(Product_Post,Product) # Вычисляем количество произведенных продуктов и увеличиваем
на это значение количество данных продуктов на складе. 20
Storage_Val(Product_Post,Product) = Storage_Val(Product_Post,Product) + Product_Speed(Product_Post,Product)*Time_Delta 30 подставляем следующий продукт в Product и возвращаемся на
10 до тех пор пока не переберем все продукты 40 подставляем следующую планету в Product_Post и
возвращаемся на 10 до тех пор пока не переберем все планеты Обсчитываем все планеты потребители инициализация 50 Delta_Price = Price_Max(Product) - Price_Min(Product) сам обсчет 10 Spros_Uch = 0 : Money = 0 11 Product_Need=Time_Delta*Nas(Product_Potr)*KPotr(Product_Potr,Product)*KTechPotr(Product_Potr,Product)+Time_Delta*Factory_Val(Product_Potr,Product)*KFactPotr(Product_Potr,Product) 12 Product_Need1 = Product_Need 20 подставляем следующего поставщика у которого Price_Potr
будет минимальна в
Product_Post, По формуле Price_Potr =
Price_Post(Product_Post,Product) + Postav_Dist
* KRange(Product) + Delta_Price *( KRisс(Product_Post) + *KRisс(Product_Potr) )
#(KRisс брать в зависимости от строя на планете поставщике и еще придется высчитать Postav_Dist (формулу
придумайте сами)) # Проверим есть ли у данного поставщика необходимое количество
товара по формуле 30 если (Storage_Val(Product_Post,Product)
< Product_Need) то #если у данного поставщика
продуктов меньше чем необходимо данному потребителю 40 если (Storage_Val(Product_Post,Product)
<=0) то #если у данного
поставщика дефицит данных продуктов 50 если
(Spros_Uch=0) то #и это первый
проверяемый поставщик #
переключим переменную первого поставщика 60 Spros_Uch=1 #И увеличим его дефицит 70 Storage_Val(Product_Post,Product)
= Storage_Val(Product_Post,Product) - Product_Need 80 Конец
если (50 строки) 90 иначе (для
если 40 строки) #иначе,
если у данного поставщика дефицита пока нет, но его запасов данному потребителю недостаточно #подсчитаем
сколько средств придется затратить на приобретение данного товара у данного поставщика 95 Money = Money + Price_Potr *
Storage_Val(Product_Post,Product) #уменьшим
потребность в товарах данного потребителя на остаток на складе данного поставщика 100 Product_Need = Product_Need -
Storage_Val(Product_Post,Product) #создадим дефицит данному поставщику 110 Storage_Val(Product_Post,Product)
= Storage_Val(Product_Post,Product) - Product_Need 120 конец если (40
строки) 130 иначе (для если 30 строки) # иначе
если у данного поставщика достаточно товаров для данного потребителя # Списываем
у данного поставщика количество товаров необходимое данному потребителю 140 Storage_Val(Product_Post,Product) =
Storage_Val(Product_Post,Product) - Product_Need 145 Money = Money + Price_Potr *
Storage_Val(Product_Post,Product) 150 Product_Need =
0 160 конец если (30 строки) # Если спрос на
данные товары у данного потребителя еще не удовлетворен то повторим все сначала 170 если Product_Need > 0 то возвращаемся на 20 строку # подсчитаем
среднюю арифметическую себестоимость данного товара у данного потребителя 180
Price_Aver = Money / Product_Need1 #Со 190 по 250 надо вставить подсчет удовлетворенности
спроса населения на данный продукт(исходя из полученной переменной Price_Aver)(
что-то у меня уже мозги закипают. никак придумать не могу.) #т.е каким-то образом суммировать данные по всем продуктам
для получения коэффициента удовлетворенности по всем продуктам с учетом
коэффициента потребности КАЖДОГО продукта для населения) 250 подставляем следующий продукт в Product и возвращаемся
на 10 до тех пор пока не переберем все продукты #260 до 290 Здесь уже должен жить КР который в зависимости
от удовлетворенности спроса либо увеличит население либо
уменьшит #причем уменьшение должно происходить резко. Чкть-ли не
вдвое, с резким падением технологического уровня и периодом анархии 300 подставляем следующую планету в Product_Post и
возвращаемся на 10 до тех пор пока не переберем все планеты Таким манером
обсчитываем все планеты потребляющие данный товар, а затем запускаем корректора рынка на проверку условия если Price_Aver(Product) <
(Price_Max(Product) + Price_Min(Product))/2, то можно увеличить население данной планеты по формуле: Инициализация 10
Delta_Aver=0 Сам КР Для всех
продуктов выполнить следующее 10 Delta_Aver= Delta_Aver+
(((Price_Max(Product) + Price_Min(Product)/2) - Price_Aver(Product))/(Price_Max(Product) -
Price_Min(Product)): I=I+1 затем Delta_Aver=Delta_Aver/I А теперь можно увеличивать население
по формуле 10
Nas=Nas+Nas*Delta_Aver Теперь
проверим не стало-ли население больше максимального(Nas>Nas_Max), и если да: Nas =
Nas/2: Tech_Level = Tech_Level+1 ======================================================== Обсчитываем все планеты
поставщики по формуле для сельхоз продуктов 10
Product_Speed = (2^Tech_Level(Product_Post)) * (2^Climat_Level(Product_Post))
* Factory_Val(Product_Post,Product) * Factory_Dev(Product) для индустриальных продуктов заменим
Climat_Level на
Mineral_Level и получим 10
Product_Speed = (2^Tech_Level(Product_Post)) * (2^Mineral_Level(Product_Post))
* Factory_Val(Product_Post,Product) * Factory_Dev(Product) # Заложим в
коэффициент себестоимости половину дельты по товару. 15 Ksebe =
0.5*( Product_Speed - Product_Speed_Min(Product) )/ Product_Speed_Delta(Product) 16
Price_Min(Product,Planet) = Price_Min(Product) + KSebe * Price_Delta(Product) 20 если Storage_Val(Product_Post,Product)>=0 #если имеется не распроданный
товар то надо снижать цену по программе 30 если Price_Post(Product_Post,Product)
> Price_Min(Product,Planet) #если
цена больше минимальной для данной планеты то уменьшим ее по формуле 40 Price_Post(Product_Post,Product)=Price_Post(Product_Post,Product)-( Price_Delta(Product) *Storage_Val(Product_Post,Product))/(Product_Speed*Time_Delta) #а если цена
должна упасть меньше минимума 50 если Price_Post(Product_Post,Product)
< Price_Min(Product,Planet) то #установим
ее в минимальное значение по формуле 55 Price_Post(Product_Post,Product)=Price_Min(Product,Planet) 56 конец
если (50 Строка) 57 конец если
(30 Строка) # если же наблюдается нехватка товара
Storage_Val(Product_Post,Product)<0 то соответственно нужно поднимать цены и открывать фабрики
по программе 58 Иначе #проверим уровень цены 60 если Price_Post(Product_Post,Product)
< Price_Max(Product) то #и если цена меньше
максимальной то увеличим ее по формуле 65 Price_Post(Product_Post,Product)
= Price_Post(Product_Post,Product) + ( Price_Delta(Product)
* Storage_Val(Product_Post,Product))/(Product_Speed*Time_Delta) #если цена стала
больше максимальной 70 если
Price_Post(Product_Post,Product) > Price_Max(Product) то #вернем
ее к максимуму по формуле 80 Price_Post(Product_Post,Product)
= Price_Max(Product) 90 конец
если (70 Строка) 100 конец если (60
Строка) 110 конец если (20 Строка) ----------------- теперь должен поработать КР # Увеличим/уменьшим количество фабрик в зависимости от того
положительно или отрицательно значение Storage_Val(Product_Post,Product)
по программе 10 если Storage_Val(Product_Post,Product)
> 0 то 20 Factory_Close=целая часть(Storage_Val(Product_Post,Product)/(Time_Delta*Factory_Dev(Product)) 30 Factory_Val(Product_Post,Product) =
Factory_Val(Product_Post,Product) - Factory_Close # теперь проверим не стало ли
значение
Factory_Val(Product_Post,Product) меньше 1 40 если Factory_Val(Product_Post,Product)
< 1 то 60 Factory_Val(Product_Post,Product) = 1 70 конец если
(40 строка) 80 конец если (10 строка) 90 если Storage_Val(Product_Post,Product)
< 0 то 100 Factory_Open=модуль ( целая часть (
Storage_Val( Product_Post,Product) / (
Time_Delta * Factory_Dev(Product_Post,Product) ) ) 110 Factory_Val(Product_Post,Product) =
Factory_Val(Product_Post,Product) + Factory_Open 120 # теперь
проверим не стало ли значение Factory_Val(Product_Post,Product) больше максимума
необходимого для поддержания текущего технологического уровня и если да то
поднимим уровень и установим количество фабрик в минимум 130 если Factory_Val(Product_Post,Product)
> Factory_Max(Product_Post,Product) то 140 Tech_Level(Product_Post) =
Tech_Level(Product_Post) + 1 150 Factory_Val(Product_Post,Product)
= целая часть (Factory_Max(Product_Post,Product)
/ 2) 160 конец если
(130 строка) 170 конец если (90 строка) |