Диплом (1222543), страница 12
Текст из файла (страница 12)
end
close(h);
%расчет маршрутов от месторождений до установленного места обогатительной
%фабрики для визуализации
PathMesh=[];
L=[];
for q=1:size(Source, 2)
for i=1:Lx(2,1)
for j=1:Lx(2,1)
Mesh(i,j)=SMesh(i,j); %запись исходной матрицы в рабочую матрицу
end
end
for i=1:length(BaseP)
BaseP(3,i)=0;
end
Mesh(XX,YY)=3; % ОФ помечается как 3
Mesh2=[];
Point=[Source(1,q),Source(2,q)]; %координаты текущего положения
Point2=[Point(1,1),Point(1,2)]; % координаты предыдущего положения
CPX=Source(1,q); %для хранения последней контрольной точки
CPY=Source(2,q);
LngN=0; %счетчик расчета
LngN2=0;
LngN=0; %счетчик расчета
CC=0;
distmid=0; %промежуточное значение дистанции
min_l=999;
zer=0; %счетчик
Cond=0; %условие выполнения цикла
dist=0; %длина маршрута от месторождения до ОФ
cnd=1; %триггер условий
sq=sqrt(dx); %константа корень из двух
count=0;
DistM=[];
CtrP=0;
while Cond~=1
min_l=999;
CC=CC+1;
NoP=0;
for i=-1:1:1
for j=-1:1:1
LngN=LngN+1;
Lngi=sqrt(((Point(1,1)+i)-XX)^2+((Point(1,2)+j)-YY)^2);
Lngi2=sqrt(((Point(1,1)+i)-Point2(1,1))^2+((Point(1,2)+j)-Point2(1,2))^2);
Lng(1,LngN)=Lngi;
Lng(4,LngN)=Lngi2;
if(Point(1,1)+i<=Lx(2,1))&&(Point(1,2)+j<=Lx(2,1))&&(Point(1,1)+i>0)&&(Point(1,2)+j>0)
Lng(2,LngN)=Point(1,1)+i;
Lng(3,LngN)=Point(1,2)+j;
end
end
end
Point2=[Point(1,1),Point(1,2)];
LngN=0;
DistX=Point(1,1); %для вычисления расстояния между узлами
DistY=Point(1,2);
Px=Point(1,1);Py=Point(1,2); %для проверки успешности проложения маршрута
if(cnd==1) %выполнение простого продвижения к цели
for k=1:length(Lng)
if (Mesh(Lng(2,k),Lng(3,k))~=0)
if (Mesh(Lng(2,k),Lng(3,k))~=2)
if(CC==1)
if (min_l>Lng(1,k))
Point=[Lng(2,k),Lng(3,k)];
min_l=Lng(1,k);
end
else
if(Lng(4,k)>=2)
if (min_l>Lng(1,k))
Point=[Lng(2,k),Lng(3,k)];
min_l=Lng(1,k);
end
end
end
end
end
end
Mesh(Point(1,1),Point(1,2))=2;
if(Point(1,1)~=DistX) && (Point(1,2)~=DistY)
dist=dist+dx*sq;
else
dist=dist+dx;
end
end
if(Point(1,1)==Px)&&(Point(1,2)==Py) %провал простого продвижения к маршруту
cnd=0;
end
if (cnd==0) % поиск наилучшей граничной точки
distI=999;
for i=1:length(BaseP)
if(SMesh(BaseP(1,i),BaseP(2,i))~=4)
if(BaseP(3,i)~=1)
if (BaseP(3,i)~=2)
% distI1=sqrt((CPX-BaseP(1,i))^2+(CPY-BaseP(2,i))^2);
distI2=sqrt((XX-BaseP(1,i))^2+(YY-BaseP(2,i))^2);
if(distI>distI2)
distI=distI2;
Xi=BaseP(1,i);
Yi=BaseP(2,i);
end
end
end
end
end
for i=1:length(BaseP)
if(BaseP(1,i)==Xi) && (BaseP(2,i)==Yi)
BaseP(3,i)=1;
end
end
cnd=2;
for i=1:Lx(2,1)
for j=1:Lx(2,1)
Mesh(i,j)=SMesh(i,j); %запись исходной матрицы в рабочую матрицу
end
end
for i=1:size(Mesh2,1)
for j=1:size(Mesh2,2)
if(Mesh2(i,j)==2)
Mesh(i,j)=Mesh2(i,j);
end
end
end
dist=distmid;
Point=[CPX,CPY];
for i=1:length(BaseP)
if(BaseP(3,i)==0)
NoP=1; %проверка использованности всех приграничных точек
end
end
if(NoP==0) % откат к предыдущей контрольной точке
count=count-1;
dist=DistM(count);
Dat=['KMesh',num2str(count)];
Mesh=eval([Dat]);
Mesh2=eval([Dat]);
for i=1:length(BaseP)
if(BaseP(3,i)==1)
BaseP(3,i)=0;
end
end
for i=1:length(BaseP)
if(BaseP(1,i)==CPX) &&(BaseP(2,i)==CPY)
BaseP(3,i)=3;
end
end
CPX=CtrP(1,count);
CPY=CtrP(2,count);
Point=[CPX,CPY];
end
end
if (cnd==2) %продвижение к наилучшей граничной точке
min_l=999;
while cnd==2
for i=-1:1:1
for j=-1:1:1
LngN=LngN+1;
Lngi=sqrt(((Point(1,1)+i)-Xi)^2+((Point(1,2)+j)-Yi)^2);
Lngi2=sqrt(((Point(1,1)+i)-Point2(1,1))^2+((Point(1,2)+j)-Point2(1,2))^2);
Lng(1,LngN)=Lngi;
Lng(4,LngN)=Lngi2;
if(Point(1,1)+i<=Lx(2,1))&&(Point(1,2)+j<=Lx(2,1))&&(Point(1,1)+i>0)&&(Point(1,2)+j>0)
Lng(2,LngN)=Point(1,1)+i;
Lng(3,LngN)=Point(1,2)+j;
end
end
end
Point2=[Point(1,1),Point(1,2)];
LngN=0;
DistX=Point(1,1);
%для вычисления расстояния между узлами
DistY=Point(1,2);
Px=Point(1,1);Py=Point(1,2);
%для проверки успешности проложения маршрута
for k=1:length(Lng)
if (Mesh(Lng(2,k),Lng(3,k))~=0)
if (Mesh(Lng(2,k),Lng(3,k))~=2)
if (min_l>Lng(1,k))
Point=[Lng(2,k),Lng(3,k)];
min_l=Lng(1,k);
end
end
end
end
Mesh(Point(1,1),Point(1,2))=2;
if(Point(1,1)~=DistX) && (Point(1,2)~=DistY)
dist=dist+dx*sq;
else
dist=dist+dx;
end
if (Point(1,1)==Xi)&&(Point(1,2)==Yi)
for i=1:length(BaseP)
if(BaseP(1,i)==Xi) &&(BaseP(2,i)==Yi)
BaseP(3,i)=2;
end
end
cnd=1;
CC=0;
distmid=dist;
min_l=sqrt(((Point(1,1))-X)^2+((Point(1,2))-Y)^2);
CPX=Point(1,1);
CPY=Point(1,2);
DistM=[DistM,dist];
count=count+1;
CtrP(1,count)=CPX;
CtrP(2,count)=CPY;
Dat=['KMesh',num2str(count)];
eval([Dat '=Mesh;']);
for i=1:Lx(2,1)
for j=1:Lx(2,1)
if(Mesh(i,j)==2)
Mesh2(i,j)=2;
end
end
end
for i=1:length(BaseP)
if(BaseP(3,i)==1)
BaseP(3,i)=0;
end
end
cnd=0;
Point=[Source(1,q),Source(2,q)];
Mesh=SMesh;
dist=0;
min_l=999;
while cnd==0
for i=-1:1:1
for j=-1:1:1
LngN=LngN+1;
Lngi=sqrt(((Point(1,1)+i)-Xi)^2+((Point(1,2)+j)-Yi)^2);
Lngi2=sqrt(((Point(1,1)+i)-Point2(1,1))^2+((Point(1,2)+j)-Point2(1,2))^2);
Lng(1,LngN)=Lngi;
Lng(4,LngN)=Lngi2;
if(Point(1,1)+i<=Lx(2,1))&&(Point(1,2)+j<=Lx(2,1))&&(Point(1,1)+i>0)&&(Point(1,2)+j>0)
Lng(2,LngN)=Point(1,1)+i;
Lng(3,LngN)=Point(1,2)+j;
end
end
end
Point2=[Point(1,1),Point(1,2)];
LngN=0;
DistX=Point(1,1);
%для вычисления расстояния между узлами
DistY=Point(1,2);
Px=Point(1,1);Py=Point(1,2);
%для проверки успешности проложения маршрута
for k=1:length(Lng)
if (Mesh(Lng(2,k),Lng(3,k))~=0)
if (Mesh(Lng(2,k),Lng(3,k))~=2)
if (min_l>Lng(1,k))
Point=[Lng(2,k),Lng(3,k)];
min_l=Lng(1,k);
end
end
end
end
Mesh(Point(1,1),Point(1,2))=2;
if(Point(1,1)~=DistX) && (Point(1,2)~=DistY)
dist=dist+dx*sq;
else
dist=dist+dx;
end
if (Point(1,1)==Xi)&&(Point(1,2)==Yi)
qwert=7;
cnd=1;
count=1;
Dat=['KMesh',num2str(count)];
eval([Dat '=Mesh;']);
distmid=dist;
DistM=dist;
CtrP=0;
CtrP(1,count)=CPX;
CtrP(2,count)=CPY;
Mesh2=Mesh;
end
if(Point(1,1)==Px)&&(Point(1,2)==Py)
qwert=5;
cnd=1;
Dat=['KMesh',num2str(count)];
Mesh=eval([Dat]);
dist=distmid;
Point=[CPX,CPY];
end
end
end
if(Point(1,1)==Px)&&(Point(1,2)==Py)
%провал простого продвижения к маршруту
cnd=0;
end
end
end
if (Point(1,1)==XX)&&(Point(1,2)==YY)
Cond=1;
for i=1:Lx(2,1)
for j=1:Lx(2,1)
if(Mesh(i,j)==2)
PathMesh(i,j)=2;
end
end
end
end
end
L=[L, dist];
end
for i1=1:Nsource
Tp(i1)=Va/Qexs+L(i1)/Vgr+L(i1)/Vpor+3/60; %продолжительность рейса
Qcmav(i1)=Qs*ceil(Tcm/Tp(i1)); %сменная производительность автосамосвала
Ncm(i1)=ceil(Qgm(i1)/(Qexs*Kisx*Tcm)); %количество смен на весь срок отработки
Navt(i1)=ceil(Qgm(i1)/(Ncm(i1)*Qcmav(i1)*Kras/gamma));
% количество автосамосвалов
Nreis(i1)=ceil(Tcm/Tp(i1));
% количество рейсов в смену
suml(i1)=L(i1)*Nreis(i1)*Navt(i1)*Ncm(i1);
% пробег всех машин на i-ом месторождении за год
sumL=sumL+suml(i1);
end
%задание тепловой карты рентабельности, визуализация результатов
for i=1:Lx(2,1)
for j=1:Lx(2,1)
FinMesh(i,j)=SMesh(i,j); %доступные участки помечаются как 1
end
end
for i=1:size(PathMesh,1)
for j=1:size(PathMesh,2)
if(PathMesh(i,j)==2)
FinMesh(i,j)=PathMesh(i,j);
%доступные участки помечаются как 1
end
end
end
FinMesh(XX,YY)=3;
for i=1:Lx(2,1)
for j=1:Lx(2,1)
FinMesh1(Lx(2,1)+1-i,j)=FinMesh(i,j);
end
end
for i=1:Lx(2,1)
for j=1:Lx(2,1)
if (Profit(i,j)==0)
Profit2(i,j)=0;
else
Profit2(i,j)=(Profit(i,j)-Krit2)/(Krit-Krit2)*100;
end
end
end
for i=1:Lx(2,1)
for j=1:Lx(2,1)
Profit1(Lx(2,1)+1-i,j)=Profit2(i,j);
end
end
[QQ,WW]=meshgrid(1:1:Lx(2,1),1:1:Lx(2,1));
surface(QQ,WW,Profit1); % отображение тепловой карты
T = array2table(FinMesh1);
fileID = fopen('результаты.txt','w');
%запись результатов в текстовый файл
fprintf(fileID,'%d\r\n',Lx(1,1));
fprintf(fileID,'%d\r\n',Lx(2,1));
for i=1:Lx(2,1)
for j=1:Lx(2,1)
fprintf(fileID,'%d ',FinMesh(i,j));
end
fprintf(fileID,'\r\n');
end
fclose(fileID);
z=0;
ПРИЛОЖЕНИЕ Б
(рекомендуемое)
Текст программы представления исследуемой территории в
матричный вид в Microsoft Visual Studio 2013
EnterForm.cs
using System;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Setka
{
public class EnterForm : Form
{
private Label label1;
private Button button1;
private TextBox textBox1;
private Label label2;
private Container components;
public EnterForm()
{
// ISSUE: fault handler
try
{
this.InitializeComponent();
}
__fault
{
base.Dispose(true);
}
}
private void \u007EEnterForm()
{
if (this.components == null)
return;
IDisposable disposable = (IDisposable) this.components;
int num;
if (disposable != null)
{
disposable.Dispose();
num = 0;
}
else
num = 0;
}
private void InitializeComponent()
{
this.label1 = new Label();
this.button1 = new Button();
this.textBox1 = new TextBox();
this.label2 = new Label();
this.SuspendLayout();
this.label1.AutoSize = true;
this.label1.Location = new Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new Size(235, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Введите размер загруженного участка в км.";
this.button1.Location = new Point(81, 70);
this.button1.Name = "button1";
this.button1.Size = new Size(67, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Ok";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new EventHandler(this.button1_Click);
this.textBox1.Location = new Point(81, 38);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new Size(49, 20);
this.textBox1.TabIndex = 2;
this.textBox1.Text = "0";
this.textBox1.TextAlign = HorizontalAlignment.Right;
this.textBox1.TextChanged += new EventHandler(this.textBox1_TextChanged);
this.label2.AutoSize = true;
this.label2.Location = new Point(130, 41);















