
- •Лабораторная работа №1 Построение и реализация моделирующих алгоритмов q-схем. Метод “δt”
- •Программа выполнения работы
- •Построение и реализация моделирующих алгоритмов q-схем Метод особых состояний
- •Изучение элементов системы моделирования gpss на моделях q-схем
- •Лабораторная работа № 4 Моделирование дискретно-событийных систем в среде anylogic
Построение и реализация моделирующих алгоритмов q-схем Метод особых состояний
Цель работы: выработка навыков алгоритмизации и программирования имитационных моделей систем массового обслуживания (СМО) методом особых состояний, фиксации и обработки данных в ходе статистических экспериментов с моделью.
Оборудование и программные средства: персональный компьютер, операционная система MS Windows XP/7/8, с системой программирования на языке высокого уровня (C++, С#) в среде MS Visual Studio.
Моделируемая система имеет вид:
Програмная реализация
Скриншот программы:
Код программы:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace АняМоделирование
{
public partial class Form1 : Form
{
public List<IOnTickable> ObjsTick = new List<IOnTickable>();
public List<DrawingObj> ObjsDrawing = new List<DrawingObj>();
public List<Terminator> ObjsEnd = new List<Terminator>();
public float T = 0;
public float dt = 1 ;
public int TransactCountTotal;
public int TransactCount;
public Font font = new Font(FontFamily.GenericSansSerif, 6, FontStyle.Regular);
public Form1()
{
InitializeComponent();
DoubleBuffered = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics gd = e.Graphics;
gd.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//-----------------
this.Draw(gd);
//-----------------
}
private void Draw(Graphics g)
{
foreach (DrawingObj item in this.ObjsEnd)
{
item.Draw(g);
}
foreach (DrawingObj item in this.ObjsTick)
{
item.Draw(g);
}
foreach (DrawingObj item in this.ObjsDrawing)
{
item.Draw(g);
}
}
private void button1_Click(object sender, EventArgs e)
{
new Thread(Run).Start();
}
private void Run()
{
int tmp = 0;
if (int.TryParse(this.textBox1.Text, out tmp))
{
this.TransactCountTotal = this.TransactCount = tmp;
while (!this.IsEnd())
{
this.Iterate();
}
this.Invalidate();
}
else
{
MessageBox.Show("вниматильнее!");
}
}
private void Iterate()
{
this.ObjsTick.Sort((a, b) =>
{
if (a.GetEventTime == b.GetEventTime) return 0;
if (a.GetEventTime > b.GetEventTime) return 1;
return -1;
});
if (this.ObjsTick[0].IsWork)
{
T = this.ObjsTick[0].GetEventTime;
this.ObjsTick[0].Iterate();
}
}
private bool IsEnd()
{
int sum = 0;
foreach (var item in this.ObjsEnd)
{
sum += item.Count;
}
return sum == this.TransactCountTotal;
}
private void Form1_Shown(object sender, EventArgs e)
{
Generator g = new Generator(new Point(100,100));
Servis p = new Servis(new Point(300,100));
Terminator t1 = new Terminator(new Point(500,100));
Terminator t2 = new Terminator(new Point(300,200));
g.nextNode = p;
p.nextNode = p.p1.nextNode = p.p2.nextNode = t1;
p.nextNodeOut = t2;
g.Owner = p.Owner = t1.Owner = t2.Owner = p.p1.Owner = p.p2.Owner = this;
this.ObjsTick.Add(g);
this.ObjsTick.AddRange(p.GetListPribors());
this.ObjsDrawing.Add(p);
this.ObjsEnd.Add(t1);
this.ObjsEnd.Add(t2);
}
}
}
}
Лабораторная работа №3