Автор работы: Пользователь скрыл имя, 11 Мая 2014 в 13:37, курсовая работа
Задачей данного проекта является рассмотрение технологии программирования задач сетевой оптимизации. Для этого необходимо решение разреженных недоопределенных систем линейных алгебраических уравнений, выделение из бесконечного множества решений одного, оправданного с математической точки зрения, и предложение алгоритма его поиска. Для построения решения в данном проекте используются такой пакет прикладных программ, как КТС Mathematica, и средства объектно-ориентированного языка программирования JAVA. Также анализируются неоднородные задачи потокового программирования с взаимосвязью потоков различных типов и учетом ограничений на пропускные способности дуг.
Введение 7
Часть 1 8
1. Разреженные недоопределенные системы 8
1.1 Общий вид системы 8
1.2.1 Критерий опорности 10
1.2.2. Характеристические векторы 10
1.3. Декомпозиция системы 15
Часть 2 21
1. Разреженные недоопределенные системы (обобщенная сеть) 21
2.1. Общий вид недоопределенной системы (обобщенная сеть) 21
2.2. Сетевая часть системы 22
2.2.1. Критерий опорности обощенной сети 22
2.3. Декомпозиция системы 24
2. Решение недоопределенной линейной системы средствами КТС MATHEMATICA и языка программирования Java 28
Заключение 35
Приложение А 36
Приложение В 45
=Join[,d];
}];
system2={x21,2-x24,10,
-x21,2+x22,3-6,
-x22,3-x24,3-5,
x24,1+x24,3-x25,47,
x25,44
};
t={5,4,3,2,1};
p={0,1,2,3,4};
d={0,1,1,-1,-1};
system2a=system2;
system2a[[4]]=system2a[[4]]/.{
system2a[[1]]=system2a[[1]]/.{
={x24,1®0};
For[i=1,i£4,++i,
{
If[d[[ t[[i]] ]]1,
d=Solve[ system2a[[ t[[i]] ]],x2p[[ t[[i]] ]],t[[i]]][[1]],
d=Solve[ system2a[[ t[[i]] ]],x2t[[i]],p[[ t[[i]] ]]][[1]]];
If[p[[ p[[ t[[i]] ]] ]]¹0,
system2a[[ p[[ t[[i]] ]] ]]=system2a[[ p[[ t[[i]] ]] ]]/.d];
=Join[,d];
}];
system3={x31,2-x34,1-x35,1-
-x31,2-x34,2-10,
-x34,3-7,
x34,1+x34,3+x34,2-x35,49,
x35,1+x35,418
};
t={5,3,4,2,1};
p={0,1,4,2,4};
d={0,1,1,-1,-1};
system3a=system3;
system3a[[4]]=system3a[[4]]/.{
system3a[[1]]=system3a[[1]]/.{
system3a[[5]]=system3a[[5]]/.{
system3a[[1]]=system3a[[1]]/.{
={x34,1®0,x35,1®0};
For[i=1,i£4,++i,
{
If[d[[ t[[i]] ]]1,
d=Solve[ system3a[[ t[[i]] ]],x3p[[ t[[i]] ]],t[[i]]][[1]],
d=Solve[ system3a[[ t[[i]] ]],x3t[[i]],p[[ t[[i]] ]]][[1]]];
If[p[[ p[[ t[[i]] ]] ]]¹0,
system3a[[ p[[ t[[i]] ]] ]]=system3a[[ p[[ t[[i]] ]] ]]/.d];
=Join[,d];
}];
Print["= ",];
Print["= ",];
Print["= ",];
R115,1=7x11,2+9x14,2+9x15,1+
R215,1=6x11,2+5x14,2+10x15,1+
R315,1=2x11,2+3x14,2+8x15,1+
R115,2=7x11,2+9x14,2+5x15,2+
R215,2=6x11,2+5x14,2+8x15,2+
R315,2=2x11,2+3x14,2+8x15,2+
R124,1=4x21,2+8x22,3+9x24,1+
R224,1=7x21,2+3x22,3+7x24,1+
R324,1=x21,2+5x22,3+2x24,1+3x2
R134,1=2x31,2+9x34,1+4x34,2+
R234,1=6x31,2+0x34,1+2x34,2+
R334,1=5x31,2+6x34,1+0x34,2+
R135,1=2x31,2+4x34,2+5x34,3+
R235,1=6x31,2+2x34,2+2x34,3+
R335,1=5x31,2+0x34,2+2x34,3+x3
R415,1=0x11,2+0x14,2+0x15,1+x1
R415,2=0x11,2+0x14,2+0x15,2+x1
R424,1=0x21,2+0x22,3+0x24,1+
R434,1=0x31,2+0x34,1+0x34,2+
R435,1=0x31,2+0x34,2+0x34,3+
D1=({
{R115,1, R115,2, R124,1, R134,1},
{R215,1, R215,2, R224,1, R234,1},
{R315,1, R315,2, R324,1, R334,1}
});
D2 = {{R415,1 , R415,2 ,R424,1 , R434,1}};
DD = Join [D1,D2];
Print ["Матрица DD = ",MatrixForm[DD]];
A1=556-(7x11,2+4x21,2+2x31,2+
9x14,2+4x34,2+2x24,3+5x34,3+
5x15,2+9x15,4+3x25,4+7x35,4)/.
A2=501-(6x11,2+7x21,2+6x31,2+
+2x34,2+2x34,3+10x15,1+7x35,1+
5x25,4+7x35,4)/././.;
A3=307-(2x11,2+x21,2+5x31,2+
+3x24,3+2x34,3+8x15,1+x35,1+
+8x35,4)/././.;
A4=13-(x15,4+x35,4)/././.;
b1=A1-(R135,1 x35,1);
b2=A2-(R235,1 x35,1);
b3=A3-(R335,1 x35,1);
b4=A4-(R435,1 x35,1);
b = Transpose [{{b1 ,b2 , b3, b4}}];
Print ["Вектор b = ",MatrixForm[b] ];
y = LinearSolve [DD ,b];
y=Simplify[Inverse[DD].({
{b1},
{b2},
{b3},
{b4}
})];
MatrixForm[Inverse[DD]]
Print["вектор неизвестных = ",MatrixForm[y]];
rule1={x15,1®y[[1]][[1]],x15,2
rule2={x11,2®x15,1(x11,2/.d15,
x14,2®x15,1(x14,2/.d15,1)+x15,
x15,4®x15,1(x15,4/.d15,1)+x15,
x21,2®x24,1(x21,2/.d24,1)+(x21
x22,3®x24,1(x22,3/.d24,1)+(x22
x24,3®x24,1(x24,3/.d24,1)+(x24
x25,4®x24,1(x25,4/.d24,1)+(x25
x31,2®x34,1(x31,2/.d34,1)+x35,
(x31,2/.),
x34,2®x34,1(x34,2/.d34,1)+x35,
(x34,2/.),
x34,3®x34,1(x34,3/.d34,1)+x35,
(x34,3/.),
x35,4®x34,1(x35,4/.d34,1)+x35,
(x35,4/.)
};
solution=Simplify[Join[rule1,
Print[Simplify[System/.
Print[solution];
GraphPlot[{1→2,4→2,5→4,5→2,1→
(* system1"*)
d15,1 = {x11,2®1,x14,2®-1,x15,4®-1,x15
d15,2 = {x11,2®0,x14,2®-1,x15,4®-1,x15
thread={5,4,2,1};
pred={0,1,0,2,4};
dir={0,1,0,-1,-1};
Print ["Характеристика леса
Print ["Thread = ", thread];
Print["Pred = ", pred];
Print ["Direction = ", dir];
Print ["Лес покрывающих деревьев для потока №1"];
TreePlot[{5®4,4®2,1®2,3®3}, Left, 1, SelfLoopStyle®None, DirectedEdges®True, VertexLabeling®True]
Print ["Добавленная дуга - x15,1 "];
Print
["Соответствующий
TreePlot[{5®4, 5®1, 4®2, 1®2, 3®3}, Top, 1, SelfLoopStyle®None, DirectedEdges®True, VertexLabeling®True]
Print ["Добавленная дуга - x15,2 "];
Print
["Соответствующий
TreePlot[{5®4, 5®2, 4®2, 1®2, 3®3}, Top, 1, SelfLoopStyle®None, VertexLabeling®True, DirectedEdges®True]
(*system2*)
d24,1 = {x21,2®1,x24,3®-1,x22,3®1,x25,
Print
["Характеристика леса
thread={5,4,2,1};
pred={0,1,0,2,4};
dir={0,1,0,-1,-1};
Print ["Thread = ", thread];
Print["Pred = ", pred];
Print ["Direction = ", dir];
thread={5,4,3,2,1}
pred={0,1,2,3,4}
dir={0,1,1,-1,-1}
Print ["Лес покрывающих деревьев для потока №2"];
TreePlot[{5®4,4®3,2®3,1®2},
Print ["Добавленная дуга - x24,1 "];
Print
["Соответствующий
TreePlot[{5®4,4®3,2®3,1®2,4®1}
(*system3*)
d34,1 ={x31,2®1,x34,2®-1,x34,3®0,x35
d35,1 ={x31,2®1,x34,2®-1,x34,3®0,x35
thread={5,3,4,2,1};
pred={0,1,4,2,4};
dir={0,1,1,-1,-1};
Print
["Характеристика леса
Print ["Thread = ", thread];
Print["Pred = ", pred];
Print ["Direction = ", dir];
Print ["Лес покрывающих деревьев для потока №3"];
TreePlot[{1®2,4®2,4®3,5®4},
Print ["Добавленная дуга - x34,1 "];
Print
["Соответствующий
TreePlot[{1®2, 4®1, 4®2, 4®3, 5®4},Top, 1, DirectedEdges®True, VertexLabeling®True]
Print ["Добавленная дуга - x35,1 "];
Print
["Соответствующий
TreePlot[{1®2,5®1,4®2,4®3,5®4}
Null
Приложение В
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Testing {
public static void main(String[] args) {
Scanner sc;
int f;
int [] d = new int [6];
int [] p = new int [6];
int [] t = new int [6];
int [] Solve = new int[6];
String [] files = {"D:\\System_1.txt", "D:\\System_2.txt", "D:\\System_3.txt"};
String filename;
for (f = 0; f<3; f++){
filename = files[f];
try {
sc = new Scanner(new File(filename));
//System.out.print("direction : ");
for (int i = 1; i < 6; i++) {
int x = sc.nextInt();
d[i] = x;
}
System.out.println();
for (int i = 1; i < 6; i++)
{
int x = sc.nextInt();
t[i] = x;
}
for (int i = 1; i < 6; i++)
{
int x = sc.nextInt();
p[i] = x;
}
for (int i = 1; i < 6; i++)
{
int x = sc.nextInt();
Solve [i] = x;
}
int x[][] = new int [6][6];
int system1 [][] = new int [6][6];
int system2 [][] = new int [6][6];
int system3 [][] = new int [6][6];
int system4 [][] = new int [6][6];
int system5 [][] = new int [6][6];
int peremenn = 0;
for (int i = 0; i < t.length; i++)
{
if(t[i]!=0)
peremenn++;
}
for (int j = 0; j < peremenn ; j++)
{
int index = sc.nextInt();
int sys1 [][] = new int [6][6];
int number = sc.nextInt();
if (number == 0){
index = sc.nextInt();
number = sc.nextInt();
}
for (int i = 0; i < number; i++){
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
sys1 [a][b] = c;
}
switch (index) {
case 1: {system1 = sys1; }break;
case 2: {system2 = sys1; }break;
case 3: {system3 = sys1; }break;
case 4: {system4 = sys1; }break;
case 5: {system5 = sys1; }break;
default: break; }
}
System.out.print(" Частное решение: ");
while (sc.hasNext()!= false){
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
System.out.print("X(" + a + "," + b + ")=" + c + ". ");
system1 [a][b] =c;
system2 [a][b] =c;
system3 [a][b] =c;
system4 [a][b] =c;
system5 [a][b] =c;
}
int ff = 0;
int I = 1;
int num = t[I];
int sys [][] = new int [6][6];
switch (num) {
case 1: {sys = system1; }break;
case 2: {sys = system2; }break;
case 3: {sys = system4; }break;
case 4: {sys = system4; }break;
case 5: {sys = system5; }break;
default: break; }
int a1 = 0; int b1 = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
ff = sys[i][j];
if ( sys[i][j] != 0)
{a1 = i; b1 = j; }
}
}
sys[a1][b1] = Solve [num]/sys[a1][b1];
x[a1][b1] = sys[a1][b1];
I = 2;
num = t[I];
switch (num) {
case 1: {sys = system1; }break;
case 2: {sys = system2; }break;
case 3: {sys = system3; }break;
case 4: {sys = system4; }break;
case 5: {sys = system5; }break;
default: break; }
sys[a1][b1]*=x[a1][b1];
int a2 = 0; int b2 = 0;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{ff = sys[i][j];
if ((sys [i][j]!=0)&&(sys[i][j]!= sys[a1][b1]))
{a2 = i; b2 = j;}
}
}
sys [a2][b2] = (Solve[num] - sys[a1][b1])/ sys[a2][b2];
x[a2][b2] = sys[a2][b2];
I = 3;
int a3 = 0; int b3 = 0;
num = t[I];
switch (num) {
case 1: {sys = system1; }break;
case 2: {sys = system2; }break;
case 3: {sys = system3; }break;
case 4: {sys = system4; }break;
case 5: {sys = system5; }break;
default: break; }
sys[a2][b2]*=x[a2][b2];
sys[a1][b1]*=x[a1][b1];
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
ff = sys[i][j];
if ((ff != 0)&&(ff != sys[a2][b2])&&(ff != sys[a1][b1]))
{a3 = i; b3 = j;}
}
}
sys[a3][b3] = (Solve[num] - sys[a2][b2] - sys[a1][b1])/ sys[a3][b3];
x[a3][b3] = sys[a3][b3];
I = 4;
int a4 = 0; int b4 = 0;
num = t[I];
switch (num) {
case 1: {sys = system1; }break;
case 2: {sys = system2; }break;
case 3: {sys = system4; }break;
case 4: {sys = system4; }break;
case 5: {sys = system5; }break;
default: break; }
sys[a3][b3]*=x[a3][b3];
sys[a2][b2]*=x[a2][b2];
sys[a1][b1]*=x[a1][b1];
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
ff = sys[i][j];
if ((ff != 0)&&(ff != sys[a3][b3])&&(ff != sys[a2][b2])&&(ff != sys[a1][b1]))
{a4 = i; b4 = j;}
}
}
if (sys[a4][b4]!=0){
sys[a4][b4] = (Solve[num] - sys[a3][b3] -sys[a2][b2] - sys[a1][b1] )/ sys[a4][b4];
x[a4][b4] = sys[a4][b4];
}
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
ff = x[i][j];
if (ff != 0){
System.out.print("X(" + i + "," + j + ")=" + x[i][j] + ". ");
}
}
}
System.out.println();
}
catch (FileNotFoundException e) {
System.out.print(" ");
}
}
}
}
Информация о работе Технологии программирования задач сетевой оптимизации