.


:




:

































 

 

 

 


1.

SMOModel_Program.cs

using System;

 

namespaceModel_Lab

{

classProgram

{

staticvoid Main(string[] args)

{

//

varsmoModel = newSmoModel(null, "");

 

try

{

//

smoModel.PERFORM();

}

catch (Exception e)

{

// ,

smoModel.Tracer.TraceOut(e.Message);

}

 

//

smoModel.Tracer.OutStream.Flush();

}

}

}

 

SMOModel_Class.cs

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

 

usingCommonModel.StatisticsCollecting;

usingCommonModel.RandomStreamProducing;

usingCommonModel.Collections;

usingCommonModel.Kernel;

usingCommonModel.Serialization;

usingSystem.Runtime.Serialization;

 

 

namespaceModel_Lab {

 

 

[DataContract]

publicpartialclassSmoModel:Model

{

 

#region

 

constintstreamAmount = 2; //

constintqueueAmount = 3; //

[DataMember]

double[] Lamd = newdouble[streamAmount]; //

[DataMember]

double[] Mu = newdouble[streamAmount]; //

[DataMember]

int A, B; //

int[] M = newint[queueAmount]; //

[DataMember]

publicconstdouble P = 0.25; // 2

[DataMember]

doubleTP; //

 

#endregion

 

#region

 

bool[] KZ = newbool[streamAmount]; //

int NZS;

 

// ,

 

TIntVar [] KVZ; // (3)

TIntVar [] KPZ; // (3)

TRealVar[] TSZK; // (2)

TRealVar[] Tobs; // (2)

TIntVarKZS; // (1 - )

 

#endregion

 

#region

 

//

publicclassZayavka

{

publicdoubleTvh; //

publicintNZ; //

publicintNP; //

}

 

//

classQRec:QueueRecord

{

publicZayavka Z;

}

 

//

 

SimpleModelList<QRec>[] Queue;

 

 

#endregion

 

#region C

 

Variance<int>[] Variance_KVZ = newVariance<int>[queueAmount];

Variance<int>[] Variance_KPZ = newVariance<int>[queueAmount];

Variance<double>[] Variance_Tobs = newVariance<double>[streamAmount];

Variance<int>Variance_KZS;

 

#endregion

 

#region

 

UniformStreamUniform_generator; //

ExpStreamFirstStream_ReqTime_ExpGenerator; //

ExpStreamSecondStream_ReqTime_ExpGenerator; //

ExpStreamFirstStream_ServTime_ExpGenerator; //

ExpStreamSecondStream_ServTime_ExpGenerator; //

 

#endregion

 

#region

 

publicSmoModel(Model parent, string name): base(parent, name)

{

Queue = newSimpleModelList<QRec>[queueAmount]; //

 

KVZ =newTIntVar[queueAmount]; //

KPZ =newTIntVar[queueAmount]; //

TSZK = newTRealVar[streamAmount]; //

Tobs = newTRealVar[streamAmount]; //

KZS =InitModelObject<TIntVar>(" ");//

 

for (inti = 0; i<streamAmount; i++)

{

TSZK[i] = InitModelObject<TRealVar> (" ");

// KZS[i] = InitModelObject<TIntVar>(" ");

Tobs[i] = InitModelObject<TRealVar> (" ");

 

// Variance_TSZK[i] = InitModelObject<Variance<double>>(" TSZK " + (i + 1).ToString() + " ");

Variance_Tobs[i] = InitModelObject<Variance<double>>("Tobs " + (i + 1).ToString() + " ");

}

 

for (inti = 0; i<queueAmount; i++)

{

KVZ[i] = InitModelObject<TIntVar>(" ");

KPZ[i] = InitModelObject<TIntVar>(" ");

 

Variance_KVZ[i] = InitModelObject<Variance<int>>(" KVZ" + (i + 1).ToString() + " ");

Variance_KPZ[i] = InitModelObject<Variance<int>>(" KPZ" + (i + 1).ToString() + " ");

}

 

for (inti = 0; i<queueAmount; i++)

Queue[i] = InitModelObject<SimpleModelList<QRec>>(" " + (i + 1).ToString() + " ");;

 

Variance_KZS = InitModelObject<Variance<int>>(" KZS");

 

 

// c#?

Uniform_generator = InitModelObject<UniformStream>(" ' 2- ' ");

 

FirstStream_ReqTime_ExpGenerator = InitModelObject<ExpStream> (" ' '");

SecondStream_ReqTime_ExpGenerator = InitModelObject<ExpStream> (" ' '");

FirstStream_ServTime_ExpGenerator = InitModelObject<ExpStream> (" ' '");

SecondStream_ServTime_ExpGenerator = InitModelObject<ExpStream>(" ' '");

 

for (inti = 0; i<streamAmount; i++)

{

Variance_Tobs[i].ConnectOnSet(Tobs[i]);

}

 

for (inti = 0; i<queueAmount; i++)

{

Variance_KVZ[i].ConnectOnSet(KVZ[i]);

Variance_KPZ[i].ConnectOnSet(KPZ[i]);

}

 

Variance_KZS.ConnectOnSet(KZS);

}

 

#endregion

}

}

SMOModel_Event.cs

using CommonModel.Kernel;

 

namespace Model_Lab

{

 

public partial class SmoModel: Model

{

// -

public class Event1_Enter:TimeModelEvent<SmoModel>

{

#region

public Zayavka Z;

#endregion

 

 

//

protected override void HandleEvent(ModelEventArgsargs)

{

Model.KVZ[0].Value++; // 1

Model.KZS.Value++; //

 

Z.Tvh = Model.Time; //

Z.NP = 0;

 

 

Model.Tracer.EventTrace(this, Z.NZ); //

 

//

if(!Model.KZ[0])

{

Model.KZ[0] = true; //

 

// Event2_Finish

var ev2 = new Event2_Finish(); //

ev2.Z = this.Z; //

 

//

doubledt = Model.FirstStream_ServTime_ExpGenerator.GenerateValue();

 

//

Model.PlanEvent(ev2, dt);

 

//

Model.Tracer.PlanEventTrace(ev2, Z.NZ);

}

 

//

else

{

//

if (Model.Queue[0].Count.Value<Model.M[0])

{

 

varQueueRecord = new QRec(); //

QueueRecord.Z = this.Z; //

Model.Queue[0].Add(QueueRecord); //

 

}

 

//

else

{

Model.KPZ[0].Value++; //

Model.KZS.Value--; //

}

 

}

 

//

Zayavkanew_Z = newZayavka();//

Model.NZS++;

new_Z.NZ = Model.NZS;

 

var ev1 = new Event1_Enter(); //

ev1.Z = new_Z; //

 

//

double dt1 = Model.FirstStream_ReqTime_ExpGenerator.GenerateValue();

 

//

Model.PlanEvent(ev1, dt1);

 

//

Model.Tracer.PlanEventTrace(ev1, new_Z.NZ);

 

Model.TraceModel(); //

}

}

 

// -

public class Event2_Finish:TimeModelEvent<SmoModel>

{

#region

public Zayavka Z;

#endregion

 

//

protected override void HandleEvent(ModelEventArgsargs)

{

Model.KVZ[1].Value++; // 1

Model.Tracer.EventTrace(this, Z.NZ); //

//

if(!Model.KZ[1])

{

Model.KZ[1] = true; //

// Event2_Finish

var ev3 = new Event3_Finish2(Z); //

//ev3.Z = this.Z; //

//

double dt = Model.SecondStream_ServTime_ExpGenerator.GenerateValue();

//

Model.PlanEvent(ev3, dt);

//

Model.Tracer.PlanEventTrace(ev3, Z.NZ);

}

//

else

{

//

if (Model.Queue[1].Count.Value<Model.M[1])

{

varQueueRecord = new QRec(); //

QueueRecord.Z = this.Z; //

Model.Queue[1].Add(QueueRecord); //

}

//

else

{

Model.KPZ[1].Value++; //

Model.KZS.Value--; //

}

}

//

if (Model.Queue[0].Count.Value> 0)

{

// 1 (0)

var ev2 = new Event2_Finish(); //

ev2.Z = Model.Queue[0].Pop().Z; //

//

double dt1 = Model.FirstStream_ServTime_ExpGenerator.GenerateValue();

 

//

Model.TSZK[0].Value += dt1;

Model.Tobs[0].Value = Model.Time - this.Z.Tvh + dt1;

 

//

Model.PlanEvent(ev2, dt1);

 

//

Model.Tracer.PlanEventTrace(ev2, ev2.Z.NZ);

}

else

{

// 1

Model.KZ[0] = false;

}

Model.TraceModel(); //

 

}

}

 

publicclassEvent3_Finish2:TimeModelEvent<SmoModel>

{

#region

publicZayavka Z;

#endregion

 

public Event3_Finish2(Zayavka z)

{

this.Z = z;

}

 

protectedoverridevoidHandleEvent(ModelEventArgsargs)

{

//

#region

if (Z.NP == 1)

{

// ""

#region

doublenew_event = Model.Uniform_generator.GenerateValue();

if (new_event< 0.25)

{

if (Model.Queue[2].Count!= 0)// 3

{

//Model.Tracer.TraceOut("chanel is not free");

//

varev = newEvent3_Finish2(this.Z);

ev.Z = Model.Queue[2].Pop().Z;

// o

doubledt = Model.FirstStream_ServTime_ExpGenerator.GenerateValue();

 

Model.Tobs[1].Value = Model.Time - this.Z.Tvh+dt;

//

Model.TSZK[1].Value += dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

//

var Q = newQRec();

Q.Z = this.Z;

Model.Queue[2].Add(Q);

Model.TraceModel(); //

}

else

{//

//Model.Tracer.TraceOut("chanel is free");

Event3_Finish2ev = newEvent3_Finish2(this.Z);

doubledt = Model.SecondStream_ServTime_ExpGenerator.GenerateValue();

//C

Model.TSZK[1].Value += dt;

//

Model.Tobs[1].Value = Model.Time - this.Z.Tvh + dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

Model.TraceModel(); //

}

}//

#endregion

else

{

Model.KZS.Value--;

//

if (Model.Queue[2].Count!= 0)// 3

{

//

varev = newEvent3_Finish2(this.Z);

ev.Z = Model.Queue[2].Pop().Z;

// o

doubledt = Model.SecondStream_ServTime_ExpGenerator.GenerateValue();

//

Model.TSZK[1].Value += dt;

Model.Tobs[1].Value = Model.Time - this.Z.Tvh + dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

Model.TraceModel(); //

}

else

// 2

if (Model.Queue[1].Count!= 0)

{

//

varev = newEvent3_Finish2(this.Z);//, - XD

ev.Z = Model.Queue[1].Pop().Z;

// o

doubledt = Model.SecondStream_ServTime_ExpGenerator.GenerateValue();

//

Model.TSZK[1].Value += dt;

 

Model.Tobs[1].Value = Model.Time - this.Z.Tvh + dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

Model.TraceModel(); //

}

else//

Model.KZ[1] = false;

}

}

#endregion

// " "

else

{

Model.KZS.Value--;

if (Model.Queue[2].Count!= 0)// 3

{

//

varev = newEvent3_Finish2(this.Z);

ev.Z = Model.Queue[2].Pop().Z;

// o

doubledt = Model.FirstStream_ServTime_ExpGenerator.GenerateValue();

//

Model.TSZK[1].Value += dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

Model.TraceModel(); //

}

else

// 2

if (Model.Queue[1].Count!= 0)

{

//

varev = newEvent3_Finish2(this.Z);//, - XD

ev.Z = Model.Queue[1].Pop().Z;

// o

doubledt = Model.FirstStream_ServTime_ExpGenerator.GenerateValue();

//

Model.TSZK[1].Value += dt;

//

Model.PlanEvent(ev, dt);

//

Model.Tracer.PlanEventTrace(ev, ev.Z.NZ);

Model.TraceModel(); //

}

else//

Model.KZ[1] = false;

}

}

}

 

 

public class Event4_EnterTo2:TimeModelEvent<SmoModel>

{

// -

 

#region

publicZayavkaZ;

#endregion

 

public Event4_EnterTo2(Zayavka z)

{

this.Z = z;

}

 

//

protected override void HandleEvent(ModelEventArgsargs)

{

Model.KVZ[2].Value++; // 1

Model.KZS.Value++; //

Z.Tvh = Model.Time; //

Z.NP = 1;

 

Model.Tracer.EventTrace(this, Z.NZ); //

if(!Model.KZ[1])

{

Model.KZ[1] = true; //

 

// Event2_Finish

varev4 = newEvent3_Finish2(Z); // ,

 

//

double dt = Model.SecondStream_ServTime_ExpGenerator.GenerateValue();

 

//

Model.PlanEvent(ev4, dt);

 

//

Model.Tracer.PlanEventTrace(ev4, Z.NZ);

}//end

 

//

else

{

// 3-

if (Model.Queue[2].Count<Model.M[2])

{

 

varQueueRecord = new QRec(); //

QueueRecord.Z = this.Z; //

Model.Queue[2].Add(QueueRecord); //

 

}

 

// ,

else

{

Model.KPZ[2].Value++; //

Model.KZS.Value--; //

}

 

}//end

 

//

Zayavkanew_Z = newZayavka();//

Model.NZS++;

//new_Z.NZ = Model.KVZ[2]; //

new_Z.NZ = Model.NZS;

 

varev3 = newEvent4_EnterTo2(new_Z); // ,

//

double dt1 = Model.SecondStream_ReqTime_ExpGenerator.GenerateValue();

 

//

Model.PlanEvent(ev3, dt1);

 

//

Model.Tracer.PlanEventTrace(ev3, new_Z.NZ);

 

Model.TraceModel(); //

}

}

}

}

SMOModel_Experiment.cs

usingCommonModel.Kernel;

usingCommonModel.RandomStreamProducing;

 

namespaceModel_Lab

{

 

publicpartialclassSmoModel:Model

{

// True - . false. </summary>

publicoverrideboolMustStopRun(intvariantCount, intrunCount)

{

return (Time>= TP);

}

 

//

publicoverrideboolMustPerformNextVariant(intvariantCount)

{

//

returnvariantCount< 1;

}

 

//

publicoverridevoidSetNextVariant(intvariantCount)

{

#region

 

Lamd[0] = (double)1 / (double)300; // 1 / 300

Lamd[1] = (double)1 / (double)480; // 1 / 480

Mu[0] = (double)1 / (double)240; // 1 / 240

Mu[1] = (double)1 / (double)150; // 1 / 150

M[0] = 3;

M[1] = 4;

M[2] = 5;

A = 0;

B = 1;

TP = 14400000;// 4 14400000;

NZS = 0;

//: 100000

 

#endregion

 

 

#region

 

(Uniform_generator.BPNasGeneratedBaseRandomStream).Seed = 17981;

(FirstStream_ReqTime_ExpGenerator.BPNasGeneratedBaseRandomStream).Seed = 17981;

(SecondStream_ReqTime_ExpGenerator.BPNasGeneratedBaseRandomStream).Seed = 17981;

(FirstStream_ServTime_ExpGenerator.BPNasGeneratedBaseRandomStream).Seed = 17981;

(SecondStream_ServTime_ExpGenerator.BPNasGeneratedBaseRandomStream).Seed = 17981;

 

Uniform_generator.A = A;

Uniform_generator.B = B;

FirstStream_ReqTime_ExpGenerator.Lyambda = Lamd[0];

SecondStream_ReqTime_ExpGenerator.Lyambda = Lamd[1];

FirstStream_ServTime_ExpGenerator.Lyambda = Mu[0];

SecondStream_ServTime_ExpGenerator.Lyambda = Mu[1];

 

#endregion

}

 

 

publicoverridevoidStartModelling(intvariantCount, intrunCount)

{

#region

 

KZS.Value = 0;

 

for (inti = 0; i<streamAmount; i++)

{

TSZK[i].Value = 0.0;

Tobs[i].Value = 0.0;

KZ[i] = false;

}

 

for (inti = 0; i<queueAmount; i++)

{

KVZ[i].Value = 0;

KPZ[i].Value = 0;

Queue[i].Clear();

}

 

 

#endregion

 

#region C

 

Variance_KZS.ResetCollector();

 

for (inti = 0; i<streamAmount; i++)

{

Variance_Tobs[i].ResetCollector();

}

 

for (inti = 0; i<queueAmount; i++)

{

Variance_KVZ[i].ResetCollector();

Variance_KPZ[i].ResetCollector();

}

 

 

#endregion

 

//

TraceModelHeader();

 

#region

 

//Forfirst

Zayavka Z1 = newZayavka();

Z1.NZ = NZS;

NZS++;

 

varstart_event = newEvent1_Enter();

start_event.Z = Z1;

doubledt = FirstStream_ReqTime_ExpGenerator.GenerateValue();

PlanEvent(start_event, dt);

Tracer.PlanEventTrace(start_event, Z1.NZ);

 

//For second

Zayavka Z4 = newZayavka();

Z4.NZ = NZS;

NZS++;

 

var start_event4 = newEvent4_EnterTo2(Z4);

dt = SecondStream_ReqTime_ExpGenerator.GenerateValue();

PlanEvent(start_event4, dt);

Tracer.PlanEventTrace(start_event4, Z1.NZ);

 

TraceModel(); //

Tracer.TraceOut("");

 

#endregion

 

 

}

 

//

publicoverridevoidFinishModelling(intvariantCount, intrunCount)

{

Tracer.TraceOut("==============================================================");

Tracer.TraceOut("============ ===========");

Tracer.TraceOut("==============================================================");

Tracer.TraceOut("\n\t\t\t #" + variantCount + " #" + runCount);

Tracer.TraceOut(" : " + Time);

 

Tracer.TraceOut(" : " + ((double)KVZ[0].Value / (double)Time));

Tracer.TraceOut(" : " + ((double)KVZ[1].Value / (double)Time));

 

Tracer.TraceOut(" 1: " + ((double)KPZ[0].Value / (double)KVZ[0].Value));

Tracer.TraceOut(" 2: " + ((double)KPZ[1].Value / (double)KVZ[1].Value));

Tracer.TraceOut(" 3: " + ((double)KPZ[2].Value / (double)KVZ[2].Value));

 

Tracer.TraceOut(" :" + ((double)TSZK[0].Value / (double)Time));

Tracer.TraceOut(" :" + ((double)TSZK[1].Value / (double)Time));

 

Tracer.TraceOut(" : " + Variance_Tobs[0].Mx);

Tracer.TraceOut(" : " + Variance_Tobs[1].Mx);

 

Tracer.TraceOut(" : " + Variance_KZS.Mx);

}

//

voidTraceModelHeader()

{

Tracer.TraceOut(" ");

//

Tracer.TraceOut(" : ");

Tracer.TraceOut("Lamd[1] = " + Lamd[0]);

Tracer.TraceOut("Lamd[2] = " + Lamd[1]);

Tracer.TraceOut(" : ");

Tracer.TraceOut("Mu[1] = " + Mu[0]);

Tracer.TraceOut("Mu[2] = " + Mu[1]);

Tracer.TraceOut(" : ");

Tracer.TraceOut("M[1] = " + M[0]);

Tracer.TraceOut("M[2] = " + M[1]);

Tracer.TraceOut("M[3] = " + M[2]);

Tracer.TraceOut("________________________________________________________________________________");

//

Tracer.AnyTrace("KZ[0]", "KZ[1]", "Queue[0]", "Queue[1]", "Queue[2]", "KVZ[0]", "KVZ[1]", "KVZ[2]", "KPZ[0]", "KPZ[1]", "KPZ[2]", "TSZK[0]", "TSZK[1]");

Tracer.TraceOut("");

//Tracer.AnyTrace("KZ[0]", "KZ[1]", "KVZ[0]", "KVZ[1]", "KVZ[2]", "KPZ[0]", "KPZ[1]", "KPZ[2]", "Queue[0]", "Queue[1]", "Queue[2]", "TSZK[0]", "TSZK[1]");

}

 

//

voidTraceModel()

{

Tracer.AnyTrace(KZ[0], KZ[1], Queue[0].Count.Value, Queue[1].Count.Value, Queue[2].Count.Value, KVZ[0].Value, KVZ[1].Value, KVZ[2].Value, KPZ[0].Value, KPZ[1].Value, KPZ[2].Value, TSZK[0].Value, TSZK[1].Value);

//Tracer.AnyTrace(KZ[0],KZ[1], KVZ[0].Value, KVZ[1].Value, KVZ[2].Value, KPZ[0].Value, KPZ[1].Value, KPZ[2].Value, Queue[0].Count.Value, Queue[1].Count.Value, Queue[2].Count.Value,TSZK[0].Value,TSZK[1].Value);

}

 

}

}



<== | ==>
|
:


: 2018-11-12; !; : 146 |


:

:

, - , ; , - .
==> ...

1729 - | 1735 -


© 2015-2024 lektsii.org - -

: 0.304 .