Имитационная модель интеллектуального агента в условиях конкуренции
Московский Государственный Университет
Прикладной Биотехнологии
Кафедра «Компьютерные технологии и системы»
Реферат:
«Имитационная модель интеллектуального агента в условиях конкуренции»
Выполнила:
студентка АБС IV-3
Рогожкина Е.А.
Проверил:
д.т.н. проф.
Ивашкин Ю.А.
Москва
2004
Имитационная модель поведения интеллектуального агента в условиях конкуренции
В системе маркетинга фирма, действующая на рынке, рассматривается не сама по себе, а с учетом всей совокупности отношений и информационных потоков, связывающих ее с другими субъектами рынка. Условия окружающей среды, в которой действует фирма, принято называть маркетинговой средой фирмы. Маркетинговая среда слагается из микросреды и макросреды. Конкуренты являются важной составляющей маркетинговой микросреды фирмы, без учета и изучения которой невозможна разработка приемлемой стратегии и тактики функционирования фирмы на рынке.
Конкуренция в общем смысле может быть определена, как соперничество между отдельными лицами и хозяйствующими единицами, заинтересованными в достижении одной и той же цели. Важными в определении конкуренции являются следующие аспекты:
· во-первых, речь идет о рыночной конкуренции, то есть о непосредственном взаимодействии фирм на рынке;
· во-вторых, конкуренция ведется за ограниченный объем платежеспособного спроса. Именно ограниченность спроса заставляет фирмы конкурировать друг с другом.
В своем курсовом проекте я рассматриваю несовершенную конкуренцию, которую порождает олигополия. Т.е. структура, при которой огромное число обособленных потребителей и малое количество производителей, каждый из которых может удовлетворить значительную долю общего спроса.
Под немногочисленностью участников конкуренции понимается относительно малое (в пределах десятка) число фирм господствующих на рынке товаров или услуг. Олигополии могут производить как однородные, так и дифференцированные товары.
Немногочисленность фирм способствует их монополистическим соглашениям: по установлению цен, разделу или распределению рынков или по другим способам ограничения конкуренции между ними. Доказано, что конкуренция на олигополистическом рынке тем интенсивней, чем ниже уровень концентрации производства (большее число фирм), и наоборот.
Важную роль в характере конкурентных отношений на таком рынке играют объем и структура той информации о конкурентах и об условиях спроса, которой фирмы располагают: чем такой информации меньше, тем более конкурентным будет поведение фирмы. Основное отличие олигополистического рынка от рынка совершенной конкуренции связано с динамикой цен. Если на совершенном рынке они пульсируют непрерывно и бессистемно в зависимости от колебаний спроса и предложения, то при олигополии имеют тенденцию к устойчивой фиксации и изменяются не так часто. Типично так называемое лидерство в ценах, когда их преимущественно диктует одна ведущая фирма, остальные же олигополисты следуют за лидером. Доступ к рынку новым продавцам затруднен. В случае соглашения олигополистов по поводу цен, конкуренция все больше смещается в направлении качества, рекламы и индивидуализации.
В экономической литературе принято разделять конкуренцию по ее методам на:
· ценовую (конкуренцию на основе цены);
· неценовую (конкуренцию на основе качества потребительной стоимости).
В современном мире ценовая конкуренция утратила большое значение в пользу неценовых методов конкурентной борьбы. Фирмы избегают вести ценовую конкуренцию в открытой форме. Применяется она в настоящее время обычно в следующих случаях:
· фирмами-аутсайдерами в их борьбе с монополиями, для соперничества с которыми, в сфере неценовой конкуренции, у аутсайдеров нет ни сил, ни возможностей;
· для проникновения на рынки с новыми товарами;
· для укрепления позиций в случае внезапного обострения проблемы сбыта.
Неценовая конкуренция выдвигает на первый план более высокую, чем у конкурентов, потребительную стоимость товара.
К числу неценовых методов относятся все маркетинговые методы управления фирмой. Такие как разработка и выпуск новых товаров, комплексные исследования рынка и планирование маркетинга, организация работы торгового аппарата, реклама и стимулирование сбыта, кредитная политика и финансирование, политика цен, совершенствование организационной структуры, выбор наиболее эффективных каналов товародвижения, сокращение издержек обращения, усовершенствование выпускаемой продукции.
К незаконным методам неценовой конкуренции относятся: промышленный шпионаж; переманивание специалистов, владеющих производственными секретами; выпуск поддельных товаров, внешне ничем не отличающихся от изделий-подлинников, но существенно худших по качеству, а потому обычно на 50% дешевле; закупка образцов с целью их копирования.
Направлением конкурентной деятельности фирм в моей модели является конкуренция в области сбыта товаров и/или услуг на рынке. В соответствии с этапами принятия потребителем решения о покупке их соперничество является межфирменной конкуренцией, т.е. конкуренцией альтернатив доминирующих и наиболее эффективных способов удовлетворения потребности.
Конкуренция выполняет роль регулятора темпов и объемов производства, побуждая при этом производителя внедрять научно-технические достижения, повышать производительность труда, совершенствовать технологию, организацию труда и т.д.
Конкуренция является определяющим фактором упорядочения цен, стимулом инновационных процессов (внедрение в производство нововведений: новых идей, изобретений). Она способствует вытеснению из производства неэффективных предприятий, рациональному использованию ресурсов, предотвращает диктат производителей (монополистов) по отношению к потребителю.
Основными методами являются:
1. повышение качества продукции
2. снижение цен («война цен»)
3. реклама
4. развитие до- и послепродажного обслуживания
5. создание новых товаров и услуг с использованием достижений НТР и т.д.
Одной из традиционных форм конкурентной борьбы, как уже было сказано, является манипулирование ценами, т.н. «война цен», используемая, в основном, для выталкивания с рынка более слабых соперников или проникновения на уже освоенный рынок.
Более эффективной и более современной формой конкурентной борьбы является борьба за качество предлагаемого на рынок товара. Поступление на рынок продукции более высокого качества или новой потребительной стоимости затрудняет ответные меры со стороны конкурента, т.к. «формирование» качества проходит длительный цикл, начинающийся с накопления экономической и научно-технической информации.
В настоящее время получили очень большое развитие различного рода маркетинговые исследования, целью которых является изучения запросов потребителя, его отношения к тем или иным товарам, т.к. знание производителем подобного рода информации позволяет ему более точно представлять будущих покупателей его продукции, более точно представлять и прогнозировать ситуацию на рынке в результате его действий, уменьшать риск неудачи и т.д.
Большую роль играет до- и послепродажное обслуживание покупателя, т.к. необходимо постоянное присутствие производителей в сфере обслуживания потребителей. Предпродажное обслуживание включает в себя удовлетворение требований потребителей по условиям поставок: сокращение, регулярность, ритмичность поставок (например, комплектующих деталей и узлов). Послепродажное обслуживание- создание различных сервисных центров по обслуживанию купленной продукции, включая обеспечение запасными частями, ремонт и т.п.
В связи с большим влиянием на общественность средств массовой информации, прессы реклама является важнейшим методом ведения конкурентной борьбы, т.к. с помощью рекламы можно определенным образом формировать мнение потребителей о том или ином товаре, причем как в лучшую, так и в худшую стороны.
Постановка задачи
На олигополистическом рынке имеется небольшое число фирм-продавцов. Каждая из них чувствительна к политике ценообразования и маркетинговым стратегиям других. Предполагается, что все участвующие фирмы заинтересованы в лидерстве по показателям доли рынка. Т.е. их целью будет увеличение числа покупателей. При этом олигополисты варьируют не только цены, но и число (объем) услуг.
Моделируется маркетинговый процесс стабилизации рынка с двумя олигополистами с последующим вхождением третьего при N покупателях.
Модель построена с помощью имитационной системы Simplex 3.
QueryStock1 - накопитель предложений 1 фирмы
QueryStock2 - накопитель предложений 2 фирмы
QueryStock3 - накопитель предложений 3 фирмы
FirmStock - накопитель предложений всех фирм – конкурентов
ff - количество покупателей 1 фирмы
ff2 - количество покупателей 2 фирмы
ff3 - количество покупателей 3 фирмы
balances (1..3) - массив остатков товара
LOST_clients (1..3) - массив, элементы которого показывают есть ли у фирмы необслуженные клиенты
criterian (1..9) (1..100) - массив критериев покупателей
demand (1..3) - массив, содержащий объем упущенных продаж по каждой фирме
EQUIPOISE - логическая переменная: EQUIPOISE = TRUE – на рынке установилось равновесие цен
Для каждого покупателя генерируются его требования к продукту и фирме, а именно, в базисном компоненте Buyer разыгрываются элементы двумерного массива, строки которого являются критериями, а номер столбца соответствует номеру покупателя.
#Вызов внешней с-функции для формирования критериев покупателей
(tmp^):=fillClients(ARRAY criterian,100);
#include
#include
#include
#include
#include "sys_struct.h"
#include "sys_extern.h"
#include "rts_func.h"
#include "c_macros.h"
using namespace std;
// экспоненциальное распределение
real exprasp(real m)
{
real r;
real exprasp_result;
do {
r=rand()%100;
r=r/100;
} while (!(r!=0));
exprasp_result=-m*log(r);
return exprasp_result;
}
// нормальное распределение
real nrasp(real m,real stddev)
{
real r1,r2,radsqr;
real nrasp_result;
do {
r1=rand()%100;
r2=rand()%100;
r1=2*r1/100-1;
r2=2*r2/100-1;
radsqr=r1*r1+r2*r2;
} while (!((radsqr>0) && (radsqr<1)));
nrasp_result=r1*sqrt(-2*log(radsqr)/radsqr)*stddev+m;
return nrasp_result;
}
void fillClients(array a,integ r,integ *tmp)
{
int i,j;
srand(1);
for (j=1;j<=r;j++) {
InPara2(a,real,1,j) = rand()%200 + 10;
InPara2(a,real,2,j) = rand()%40 + 30;
InPara2(a,real,3,j) = rand()%2;
InPara2(a,real,4,j) = nrasp(25,5);
InPara2(a,real,5,j) = exprasp(50);
InPara2(a,real,6,j) = rand()&2+1;
InPara2(a,real,7,j) = nrasp(2.5,0.5);
InPara2(a,real,8,j) = exprasp(200);
InPara2(a,real,9,j) = nrasp(0.5,0.5);
}
}
BASIC COMPONENT buyer
MOBILE SUBCOMPONENT OF CLASS query
LOCAL DEFINITIONS
C_PROCEDURE fillClients (ARRAY(n)(s) REAL,INTEGER --> INTEGER)
DECLARATION OF ELEMENTS
STATE VARIABLES
ARRAY(9)(100) criterion (REAL):=0,
TNext(INTEGER):=0,
tmp(INTEGER):=0
DYNAMIC BEHAVIOUR
ON START DO
(tmp^):=fillClients(ARRAY criterion,100);
DISPLAY(" BUYERS ADDED.\n");
END
WHENEVER T>=TNext DO
IF TNext>47 DO
(tmp^):=fillClients(ARRAY criterion,100);
DISPLAY(" NEW BUYERS ADDED.\n");
END
TNext^:=TNext+1;
END
END OF buyer
Для каждого олигополиста также случайным образом разыгрываются параметры предлагаемого продукта и сопутствующих услуг. Но каждая фирма описывается в отдельном базисном компоненте: Firm, Firm2, Firm3, а ее параметры записываются в виде вектора в мобильный компонент.
BASIC COMPONENT Firm
MOBILE SUBCOMPONENT OF CLASS query
DECLARATION OF SUBFUNCTION
strategy(INTEGER:past_buy2,LOCATION FOR query:Stock,
ARRAY (l) LOGICAL:LOST_c,ARRAY (l) REAL:bal,INTEGER:ff1,
INTEGER:I,INTEGER:g,ARRAY(n)REAL:param1,INTEGER:cash,
ARRAY(l)REAL:dem-->ARRAY (n) REAL,INTEGER),
form(ARRAY (n) REAL:PP-->ARRAY (n) REAL)
DECLARATION OF ELEMENTS
STATE VARIABLES
ARRAY(2) past_buyers (INTEGER):=0, # количество клиентов за прошлый период
ARRAY(9)parameters1(REAL):=0, # массив параметров фирмы
ARRAY(9)p1(REAL):=0,
TNext(INTEGER):=0,
count(INTEGER):=1,
past_b(INTEGER):=0,
past_b2(INTEGER):=0,
invest(INTEGER):=0 # количество свободных денежных средств
SENSOR VARIABLES
ff(INTEGER), # количество покупателей за текущий период
ARRAY (3)balances(REAL), # остатки
ARRAY (3)LOST_cl(LOGICAL), # наличие необслуженных клиентов
ARRAY (9)parameters2(REAL),
ARRAY (9)parameters3(REAL),
firm_leader(INTEGER),
g(INTEGER),
ARRAY (3)demand(REAL) # недостающий объем
RANDOM VARIABLES
PRI(REAL):UNIFORM(LowLimit:=200,UpLimit:=400), # цена
QUAN(INTEGER):IUNIFORM(LowLimit:=100,UpLimit:=200), # объем выпуска
SAL(REAL):UNIFORM(LowLimit:=0,UpLimit:=1), # скидки
ADV(REAL):UNIFORM(LowLimit:=15,UpLimit:=35), # реклама
QUAL(REAL):EXPO(Mean:=50), # качество
ASSORT(INTEGER):IUNIFORM(LowLimit:=1,UpLimit:=3), # товарный ассортимент
TRU(INTEGER):IUNIFORM(LowLimit:=2,UpLimit:=5), # доверие
REMOT(REAL):EXPO(Mean:=150), # удаленность
DELIV(INTEGER):IUNIFORM(LowLimit:=1,UpLimit:=3), # доставка
Inv(INTEGER):IUNIFORM(LowLimit:=1,UpLimit:=4) # денежные поступления извне
TRANSITIONS INDICATORS
print,
ffm,
ffm2,
ffm3
LOCATION
QueryStock1(query):=0 query, # накопитель, содержащий параметры предложения
F1Stock(query):=0 query # накопитель, содержащий параметры предложения фирм- конкурентов
SENSOR LOCATION
FStock(query)
DYNAMIC BEHAVIOUR
ON START DO
parameters1(1)^:=PRI;
parameters1(2)^:=QUAN;
parameters1(4)^:=ADV;
parameters1(5)^:=QUAL;
parameters1(6)^:=1;
parameters1(7)^:=TRU;
parameters1(8)^:=REMOT;
parameters1(9)^:=DELIV;
SIGNAL ffm;
END
WHENEVER T>=TNext
DO IF (NUMBER(FStock)<>0) DO
SIGNAL ffm3;
(ARRAY p1^,past_b^):=strategy(past_b2,LOCATION FStock,ARRAY LOST_cl,
ARRAY balances,ff,1,g,ARRAY parameters1,invest,ARRAY demand);
SIGNAL ffm2;
END
SIGNAL ffm;
TNext^:=TNext+1;
END
ON ffm DO
QueryStock1^: ADD 1 NEW query
CHANGING
(ARRAY QB^):=form(ARRAY parameters1);
END
END
ON ffm2 DO
(ARRAY parameters1^):=form(ARRAY p1);
END
ON ffm3 DO
past_b2^:=past_b;
invest^:=Inv;
END
END OF Firm
Приходя на рынок (базисный компонент Market), покупатель рассматривает предложение каждой фирмы и выбирает максимально соответствующее его требованиям. Параллельно ведется подсчет покупателей для каждой из фирм, а также количество купленного товара.
FUNCTION FChoice
MOBILE SUBCOMPONENT OF CLASS query
DECLARATION OF ELEMENTS
INPUT PARAMETERS
FStock(LOCATION FOR query),
ARRAY(n)(s)CRITER(REAL), #покупатель
ARRAY (l) Dummy(REAL),
g(INTEGER)
OUTPUT PARAMETERS
ARRAY(l)balance(REAL), #остаток на складе
f(INTEGER), #количество покупателей фирмы 1
f2(INTEGER), #количество покупателей фирмы 2
f3(INTEGER), #количество покупателей фирмы 3
ARRAY(n)(l)copy_param(REAL),
ARRAY(l)LOST_clients(LOGICAL),
leader(INTEGER),
ARRAY (l)dem(REAL)
LOCAL VARIABLES
ss(INTEGER):=100,
k(REAL):=0, #количество совпадающих параметров
rem(REAL):=0,
maxim(REAL):=0,
imaxim(INTEGER):=0,
JMAX(INTEGER):=0,
ARRAY(l)(s)QuBu(REAL):=0, #массив совпадений
ARRAY(l)(s)QuanBuy(INTEGER), #массив распределения покупателей
ARRAY (l)clients(INTEGER),
max_cl(INTEGER)
BEGIN
FOR W FROM 1 TO 9
REPEAT
FOR I FROM 1 TO g
REPEAT
copy_param(W)(I):=FStock:query(I).QB(W);
balance(I):=FStock:query(I).QB(2);
END_LOOP
END_LOOP
#Процесс сравнения критериев покупателей с параметрами продавцов
FOR J FROM 1 TO g
REPEAT
FOR I FROM 1 TO ss
REPEAT
k:=0;
FOR R FROM 1 TO 9
REPEAT
IF R<>2 DO
# Для удовлетворения покупателя параметр продавца не должен отклоняться более чем на 20% от требования покупателя.
IF (FStock:query(J).QB(R)<=CRITER(R)(I)+CRITER(R)(I)*0.2) AND
(FStock:query(J).QB(R)>=CRITER(R)(I)-CRITER(R)(I)*0.2)
DO
k:=k+1/9;# степень удовлетворенности покупателя
END
END
END_LOOP
QuBu(J)(I):=k;
END_LOOP
END_LOOP
# Выбор покупателем наиболее подходящей фирмы
FOR I FROM 1 TO ss
REPEAT
# если итоговые показатели всех фирм одинаковы, то выбирается первая встречная, на которой есть необходимое количество товара.
IF (QuBu(1)(I)=QuBu(2)(I)) AND (QuBu(1)(I)=QuBu(3)(I))
AND (QuBu(1)(I)<>0)
DO LOOP
FOR J FROM 1 TO g
REPEAT
# подсчет остатков и выявление упущенных клиентов
IF balance(J)>=CRITER(2)(I) DO
balance(J):=balance(J)-CRITER(2)(I);
QuanBuy(J)(I):=1;
LOST_clients(J):=FALSE;
EXIT
END
END_LOOP
END
ELSIF (QuBu(1)(I)<>QuBu(2)(I)) OR (QuBu(1)(I)<>QuBu(3)(I))
DO
maxim:=0;
FOR J FROM 1 TO g
REPEAT
IF QuBu(J)(I)>maxim DO
maxim:=QuBu(J)(I);
imaxim:=J;
JMAX:=I;
END
END_LOOP
Подсчет остатков и объема упущенных продаж
IF balance(imaxim)>=CRITER(2)(I) DO
balance(imaxim):=balance(imaxim)-CRITER(2)(I);
QuanBuy(imaxim)(JMAX):=1;
LOST_clients(imaxim):=FALSE;
END
ELSIF balance(imaxim) DISPLAY("Товара НЕТ на %d !!!\n",imaxim); LOST_clients(imaxim):=TRUE; dem(imaxim):=dem(imaxim)+CRITER(2)(I); END END END_LOOP FOR J FROM 1 TO ss REPEAT f := f + QuanBuy(1)(J);# подсчет количества покупателей 1 фирмы END_LOOP FOR J FROM 1 TO ss REPEAT f2 := f2 + QuanBuy(2)(J);# подсчет количества покупателей 2 фирмы END_LOOP FOR J FROM 1 TO ss REPEAT f3 := f3 + QuanBuy(3)(J);# подсчет количества покупателей 3 фирмы END_LOOP clients(1):=f; clients(2):=f2; clients(3):=f3; #Выявление фирмы-лидера max_cl:=0; FOR I FROM 1 TO g REPEAT IF clients(I)>max_cl DO max_cl:=clients(I); leader:=I; END END_LOOP RETURN END OF FChoice В конце временного периода каждой фирме отправляется информация о количестве покупателей и об остатках товара на складах. Это реализовано в компоненте высокого уровня. HIGH LEVEL COMPONENT Market_HIGH SUBCOMPONENTS Firm, Firm2, Firm3, buyer, Market COMPONENT CONNECTION Firm.QueryStock1-->Market.QStock1; Firm2.QueryStock2-->Market.QStock2; Firm3.QueryStock3-->Market.QStock3; buyer.criterion{i OF 1..9}{j OF 1..100}-->Market.criterion(i)(j); массив критериев покупателей Firm.parameters1{i OF 1..9}-->Firm3.parameters1(i); параметры 1 фирмы в 3-ю Firm2.parameters2{i OF 1..9}-->Firm3.parameters2(i); параметры 2 фирмы в 3-ю Market.g-->Firm.g; Market.g-->Firm2.g; Market.g-->Firm3.g; # Количество покупателей Market.ff-->Firm.ff; Market.ff2-->Firm2.ff2; Market.ff3-->Firm3.ff3; # Остатки на складах Market.balances(1)-->Firm.balances(1); Market.balances(2)-->Firm2.balances(2); Market.balances(3)-->Firm3.balances(3); # Необслуженные клиенты Market.LOST_clients(1)-->Firm.LOST_cl(1); Market.LOST_clients(2)-->Firm2.LOST_cl(2); Market.LOST_clients(3)-->Firm3.LOST_cl(3); # Фирма - лидер Market.firm_leader-->Firm.firm_leader; Market.firm_leader-->Firm2.firm_leader; Market.firm_leader-->Firm3.firm_leader; # Массив, содержащий объем упущенных продаж по каждой фирме Market.demand(1)-->Firm.demand(1); Market.demand(2)-->Firm2.demand(2); Market.demand(3)-->Firm3.demand(3); Market.EQUIPOISE-->Firm3.EQUIPOISE; END OF Market_HIGH Исходя из этого и учитывая прошлый опыт (объем продаж и спрос за прошлые периоды), олигополист выбирает одну из возможных стратегий на последующий период времени. Событие 1. Так как фирм немного, то каждый продавец вынужден следить за поведением конкурентов. Таким образом, в модели фирмы-участники договариваются об установлении средней цены. Каждая фирма считает недостающий объем выпуска и в событии 2 при наличии необслуженных клиентов, увеличивает выпуск на недостающую величину. Событие 3. Если остаток фирмы больше 1/3 всего выпущенного объема, то олигополист вводит скидки для распродажи и уменьшает выпускаемый объем на 2%. Далее, исходя из изменений спроса, олигополист варьирует неценовые факторы (событие 4). Если в текущем периоде увеличивается количество покупателей по сравнению с прошлым периодом, то фирма увеличивает предлагаемый товар на 10 ед. Если же спрос снижается, то фирма предпринимает действия в соответствии с количеством имеющихся свободных денежных средств (переменная cash). При величине cash = 1, соответствующей большой сумме денежных поступлений, олигополист разрабатывает новый продукт и увеличивает свой товарный ассортимент. Дальнейшие изменения переменной cash означают уменьшение денежных средств. При cash = 2 олигополист улучшает качество имеющегося товара, тем самым улучшая свой имидж и увеличивая доверие клиентов. При cash = 3 улучшается реклама. При cash = 4 – доставка. Данный алгоритм в программе реализован следующим образом. FUNCTION strategy MOBILE SUBCOMPONENT OF CLASS query LOCAL DEFINITIONS DECLARATION OF SUBFUNCTION form(ARRAY (n)REAL:PP-->ARRAY(n)REAL) DECLARATION OF ELEMENTS INPUT PARAMETERS past_buy2(INTEGER), #j=2 l=3 n=9 Stock(LOCATION FOR query), ARRAY(l) LOST_c(LOGICAL), ARRAY(l) bal(REAL), ff1(INTEGER), I(INTEGER), #номер фирмы g(INTEGER), ARRAY (n)param1(REAL), cash(INTEGER), ARRAY (l)dem(REAL) OUTPUT PARAMETERS ARRAY(n) par(REAL), past_buy(INTEGER) LOCAL VARIABLES average_price(REAL):=0, cash1(INTEGER):=0 BEGIN (ARRAY par):=form(ARRAY param1); #Событие 1 FOR J FROM 1 TO g REPEAT average_price:=average_price+Stock:query(J).QB(1); END_LOOP average_price:=average_price/g; DISPLAY("сред цена %3.2f\n",average_price); IF par(1)>average_price DO par(1):=par(1)-par(1)*0.01; END ELSIF par(1) DO par(1):=par(1)+par(1)*0.01; END #Событие 2 IF LOST_c(I) DO par(2):=par(2)+dem(I); END ELSIF LOST_c(I)=FALSE DO par(2):=par(2); END #Событие 3 IF bal(I)>par(2)/3 DO par(3):=par(3)+1; par(2):=par(2)-par(2)*0.02; END #Событие 4 IF ff1>past_buy2 DO par(2):=par(2)+10; END ELSIF ff1<=past_buy2 DO IF cash=1 DO par(6):=par(6)+1; END ELSIF cash=2 DO par(5):=par(5)+5; IF (par(5)>230) AND (par(7)<6) DO par(7):=par(7)+1; END END ELSIF cash=3 DO par(4):=par(4)+5; END ELSIF (cash=4) AND (par(9)<3) DO par(9):=par(9)+1; END END past_buy:=ff1; RETURN END OF strategy Результаты Когда на рынке устанавливается относительное равновесие цен между первой и второй фирмой, то на него входит новая фирма, которая предварительно изучила ситуацию. Теперь события будут развиваться с тремя конкурентами до обретения нового равновесия (рис. 1, 2). Рис. 1 - Процесс установления средней цены Рис. 2 - Доля рынка каждой фирмы На графике представлено количество покупателей каждой фирмы. Синяя линия соответствует первой фирме (Firm), красная – второй (Firm2), а зеленая – третьей (Firm3). Очевидно, что некоторая доля рынка перейдет к новичку. Модель показала, какой эта доля будет и статус, который займет новая фирма – олигополист. На рис. 3 отражена конкурентная борьба, происходящая между олигополистами. Рис. 3 - Объем выпуска каждой фирмы – олигополиста Объем выпускаемой продукции напрямую связан со спросом на нее. Чем выше спрос, тем больше выпуск. Следующие графики отображают изменение величины спроса отдельно взятой фирмы. Синяя линия – это предлагаемый объем продукции, красная – остатки на складе, после совершения покупок клиентами, а область между ними – величина спроса. Рис. 4 - Изменение спроса на товар 1 фирмы Рис. 5 - Изменение спроса на товар 2 фирмы Рис. 6 - Изменение спроса на товар 3 фирмы