erian [1 .. 9] [1 .. 100] - масив критеріїв покупців
demand [1 .. 3] - масив, який містить обсяг втрачених продажів по кожній фірмі
EQUIPOISE - Логічна змінна: EQUIPOISE = TRUE - на ринку встановилася рівновага цін
Для кожного покупця генеруються його вимоги до продукту і фірмі, а саме, у базисному компоненті Buyer розігруються елементи двовимірного масиву, рядки якого є критеріями, а номер стовпця відповідає номеру покупця. br/>
# Виклик зовнішньої з-функції для формування критеріїв покупців
(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
Дл...