Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание 5 - 8 отчеты.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
197.87 Кб
Скачать

Министерство образования и науки Российской Федерации

САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ИМЕНИ Н.Г. ЧЕРНЫШЕВСКОГО

Кафедра дискретной математики и

информационных технологий

Системный анализ

Практическое задание № 5 - 8

Подготовил: Студент 4 курса, 421 гр.

Никитин С.В.

Проверил: Рогачко Е.С.

Саратов, 2013 г.

Лабораторная работа № 5

Задание:

Заданы параметры сети массового обслуживания. Определить вектор числа обслуживающих приборов, при котором выполняется условие существование стационарного режима, исследовать зависимость характеристик СеМО от µ3.

Вариант 17:

L = 4

= 8.6 = 5.8 = 6.6 = 5.8

r/q = 2.6

Ɵ =

Код программы:

package ru;

import org.apache.commons.math3.linear.*;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.xy.XYSeries;

import org.jfree.data.xy.XYSeriesCollection;

import javax.swing.*;

import java.awt.*;

import java.util.ArrayList;

import java.util.List;

public class Main {

public static List<Double> solve(double[][] coef, double[] cons) {

RealMatrix matrix = new Array2DRowRealMatrix(coef);

DecompositionSolver solver = new LUDecomposition(matrix).getSolver();

RealVector constants = new ArrayRealVector(cons);

RealVector solution = solver.solve(constants);

List<Double> list = new ArrayList<Double>();

for (double num : solution.toArray()) {

list.add(num);

}

return list;

}

private static int factorial(int x) {

int result = 1;

for (int i = 1; i <= x; i++) {

result *= i;

}

return result;

}

public static List<Double> getW(double[][] O) {

double[][] coef = new double[O.length][];

double[] cons = new double[O.length];

coef[coef.length - 1] = new double[O.length];

for (int i = 0; i < coef.length - 1; i++) {

coef[i] = O[i];

coef[i][i] -= 1.0;

cons[i] = 0;

}

for (int i = 0; i < coef[coef.length - 1].length; i++) {

coef[coef.length - 1][i] = 1;

}

cons[O.length - 1] = 1;

return solve(coef, cons);

}

private static Parameters getParameters(int k, double lam, double mu) {

double psi = lam / (mu * k);

if (psi >= 1) {

throw new IllegalArgumentException("Is to big " + psi);

}

double h = psi * k;

double g = (1 - psi) * k;

double temp1 = Math.pow(k * psi, k) / ((1 - psi) * factorial(k));

double temp2 = 0;

for (int i = 0; i < k; i++) {

temp2 += Math.pow(k * psi, i) / factorial(i);

}

double p0 = 1 / (temp1 + temp2);

double b = p0 * Math.pow(k * psi, k) * psi / (factorial(k) * (1 - psi) * (1 - psi));

double n = b + h;

double u = n / lam;

double w = b / lam;

return new Parameters(p0, b, h, g, n, u, w);

}

public static void main(String[] args) {

int L = 4;

double lam0 = 25.2;

double[][] O = {

{0, 0.5, 0.1, 0, 0.4},

{0, 0, 0, 0.8, 0.2},

{1, 0, 0, 0, 0},

{0.7, 0.3, 0, 0, 0},

{0, 0, 0.7, 0.3, 0},

};

double[] m = {0, 8.6, 5.8, 6.6, 5.8};

double rq = 2.6;

List<Double> w = getW(O);

List<Double> lam = new ArrayList<Double>();

lam.add(lam0);

for (int i = 1; i <= L; i++) {

lam.add(lam0 * w.get(i) / w.get(0));

}

List<PsiStore> psiStores = new ArrayList<PsiStore>();

for (int i = 0; i < L; i++) {

psiStores.add(new PsiStore(lam.get(i + 1), m[i + 1]));

}

List<Double> mDiff = new ArrayList<Double>();

for (double mu = 6.5; mu < 7; mu += 0.1) {

mDiff.add(mu);

}

List<List<Parameters>> systemParam = new ArrayList<List<Parameters>>();

for (Double mu : mDiff) {

List<Parameters> tempParam = new ArrayList<Parameters>();

for (int i = 1; i < m.length; i++) {

double m1 = m[i];

if (i == 3) {

m1 = mu;

}

tempParam.add(getParameters(psiStores.get(i - 1).getK(), lam.get(i), m1));

}

systemParam.add(tempParam);

}

XYSeries[] nValues = new XYSeries[4];

XYSeries[] bValues = new XYSeries[4];

XYSeries[] hValues = new XYSeries[4];

XYSeries[] p0Values = new XYSeries[4];

XYSeries[] gValues = new XYSeries[4];

XYSeries[] uValues = new XYSeries[4];

XYSeries[] wValues = new XYSeries[4];

for (int i = 0; i < 4; i++) {

nValues[i] = new XYSeries(i + 1);

bValues[i] = new XYSeries(i + 1);

hValues[i] = new XYSeries(i + 1);

p0Values[i] = new XYSeries(i + 1);

gValues[i] = new XYSeries(i + 1);

uValues[i] = new XYSeries(i + 1);

wValues[i] = new XYSeries(i + 1);

for (int j = 0; j < mDiff.size(); j++) {

nValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getN());

bValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getB());

hValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getH());

p0Values[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getP0());

gValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getG());

uValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getU());

wValues[i].add((double) mDiff.get(j), systemParam.get(j).get(i).getW());

}

}

XYSeries tValues = new XYSeries("tau");

for (int j = 0; j < mDiff.size(); j++) {

double t = 0;

for (int i = 0; i < 4; i++) {

t += lam.get(i + 1) * uValues[i].getY(j).doubleValue();

}

t *= 1.0 / lam0;

tValues.add((double) mDiff.get(j), t);

}

JPanel content = new JPanel(new GridLayout(2, 4, 10, 10));

content.add(createGraphic("mu", "n", nValues[0], nValues[1], nValues[2], nValues[3]));

content.add(createGraphic("mu", "b", bValues[0], bValues[1], bValues[2], bValues[3]));

content.add(createGraphic("mu", "h", hValues[0], hValues[1], hValues[2], hValues[3]));

content.add(createGraphic("mu", "p0", p0Values[0], p0Values[1], p0Values[2], p0Values[3]));

content.add(createGraphic("mu", "g", gValues[0], gValues[1], gValues[2], gValues[3]));

content.add(createGraphic("mu", "u", uValues[0], uValues[1], uValues[2], uValues[3]));

content.add(createGraphic("mu", "w", wValues[0], wValues[1], wValues[2], wValues[3]));

content.add(createGraphic("mu", "t", tValues));

JFrame frame = new JFrame("Graphics");

frame.getContentPane().add(content);

frame.setSize(1000, 500);

frame.setLocation(20, 50);

frame.show();

}

private static ChartPanel createGraphic(String xName, String yName, XYSeries... values) {

XYSeriesCollection xySeriesCollection = new XYSeriesCollection();

for (XYSeries value : values) {

xySeriesCollection.addSeries(value);

}

JFreeChart chart = ChartFactory.createXYLineChart("", xName, yName, xySeriesCollection, PlotOrientation.VERTICAL,

true, true, true);

return new ChartPanel(chart);

}

}

Результат работы программы:

Выводы:

Из графиков видно, что при изменении параметра µ третей СМО, меняются только характеристики третей СМО. Характеристики остальных СМО остаются неизменными. Так же все характеристики второй и четвертой СМО совпадает, так как совпадают и .

Далее рассмотрим изменение характеристик третей СМО. М.о. требований в очереди убывает при возрастании интенсивности обслуживание, так как при неизменяющейся интенсивности входного потока приборы будут быстрее обрабатывать требования, и очередь будет уменьшаться, как следствие, уменьшится и числи требований в системе. При уменьшении числа требований в очереди каждое требование будет меньше в ней находится, то есть уменьшится м.о. длительности пребывания требований в очереди и, как следствие, в системе. Из-за увеличения интенсивности обслуживания число свободных приборов будет расти, а занятых – падать, так как количество приборов, необходимых для обработки входного потока, будет уменьшаться. По этой же причине вероятность того, что в СМО будет точно 0 требований, будет расти при увеличении интенсивности обслуживания. При увеличении интенсивности обслуживания в третей СМО, м.о. времени пребывания требований в ней уменьшится, а значит, уменьшится и время пребывания требований в Сети МО.