E-Mail: info@free-da.com
Телефон: +7 (812) 642-98-71
Ищем оптимальную трассу на 1С
Для оптимизации нам понадобится алгоритм поиска кратчайшего пути реализованный в среде 1С
Рассмотрим пример нахождение кратчайшего пути погрузчика для оптимизации размещения грузов. Дан план склада в секторах по которым проезжает автопогрузчик по заданным трассам. Некоторые сектора закрыты грузом. Найти кратчайшие пути от любой точки склада до каждого сектора для размещения товара ( Или определить, что после выгрузки груза в определенный сектор некий груз станет недоступным для автопогрузчика). Для решения указанной задачи по оптимизации можно использовать алгоритм Дейкстры
Склад состоит из квадратного помещения 9 на 9 секторов. Двигаться по диагонали из сектора в сектор погрузчик не может. Создадим матрицу 10х10 где в ячейке сектора: 1 - флаг размещения груза, 0 - свободный проезд.
Функция вернет 1 если трасса существует.
==============
Функция Findpath()
XY_R = XY_S;
A_R.Clear();
A_C.Clear();
A_R.add(XY_R);
A_C.add(XY_R);
I=0;
///==============================
While (I)<A_R.Count()
do
XY_R=A_C[I];
X = Int(XY_R/10);
Y = XY_R-(X*10);
//BPaint(XY_R,1,1);
If Y > 1
Then
XY_C = XY_R-1;
IF (A_C.Find(XY_C)=Undefined AND GPole[X-1][Y-2]=0) OR (XY_C=XY_E)
then
A_R.add(XY_R);
A_C.add(XY_C);
//BPaint(XY_C,1,0);
If XY_C=XY_E then Возврат(1) endIf;
EndIf;
EndIf;
If Y < 9
Then
XY_C=XY_R+1;
IF (A_C.Find(XY_C)=Undefined AND GPole[X-1][Y]=0) OR (XY_C=XY_E)
then
A_R.add(XY_R);
A_C.add(XY_C);
//BPaint(XY_C,1,0);
If XY_C=XY_E then Возврат(1) endIf;
EndIf;
EndIf;
If X > 1
Then
XY_C=XY_R-10;
IF (A_C.Find(XY_C)=Undefined AND GPole[X-2][Y-1]=0) OR (XY_C=XY_E)
then
A_R.add(XY_R);
A_C.add(XY_C );
//BPaint(XY_C,1,0);
If XY_C=XY_E then Возврат(1) endIf;
EndIf;
EndIf;
If X < 9
Then
XY_C=XY_R+10;
IF (A_C.Find(XY_C)=Undefined AND GPole[X][Y-1]=0) OR (XY_C=XY_E)
then
A_R.add(XY_R);
A_C.add(XY_C );
//BPaint(XY_C,1,0);
If XY_C=XY_E then Возврат(1) endIf;
EndIf;
EndIf;
I=I+1;
EndDo;
Возврат(0)
КонецФункции
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии