
Министерство образования и науки Российской Федерации
САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИМЕНИ Н.Г. ЧЕРНЫШЕВСКОГО
Кафедра дискретной математики и
информационных технологий
Системный анализ
Практическое задание № 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 требований, будет расти при увеличении интенсивности обслуживания. При увеличении интенсивности обслуживания в третей СМО, м.о. времени пребывания требований в ней уменьшится, а значит, уменьшится и время пребывания требований в Сети МО.