Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824

Алгоритм Дейкстры - нахождение кратчайшего маршрута до каждой вершины

02.12.2013, 03:14. Показов 7419. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Понятно как находить кратчайший путь до каждой вершины из заданной. Непонятно как проложить маршрут.
Например, вот статья : http://habrahabr.ru/post/111361/

Там сказано, что есть вектор P, который изначально равен 1 (все значения - их столько, сколько вершин - равны единице). Если вдруг у нас измениться метка вершины на меньшую (то есть появился путь короче предыдущего), то число вектора, которое отвечает за эту вершину измениться на номер текущей вершины. Например, есть вершина 5 - ее метка 10, а теперь появился путь через 4 вершину - метка стала 7. 4 запишется на 5 место в векторе.
Правильно?

Дак вот это не работает (или я что-то не понимаю), если у нас путь до вершины минимальный проходит более чем через одну вершину, как в моем случае.
Матрица:
Вот матрица:
0 3 0 0 7 0 0 0 0
3 0 4 9 0 0 0 0 0
0 4 0 0 0 2 8 0 0
0 9 0 0 0 7 0 0 4
7 0 0 0 0 0 1 0 0
0 0 2 7 0 0 1 7 0
0 0 8 0 1 1 0 2 0
0 0 0 0 0 7 2 0 0
0 0 0 4 0 0 0 0 0

Или граф:
http://habr.habrastorage.org/c... a80979.jpg

Наикратчайший маршрут из 7 из 9 такой: 7->6->4->9. Делая как предлагает автор, я получил вектор P = {1,1,6,1,1,1,1,1,4}. Из этого следует, что в 3 вершину путь такой: 7 -> 6 -> 3 — правильно. Но в 9 такой: 7 -> 4 -> 9. Это неправильно. Я что-то не так сделал?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2013, 03:14
Ответы с готовыми решениями:

Алгоритм Дейкстры, нахождение кратчайшего пути
Доброго времени суток всем! У меня вопрос. Написала программку для нахождения кратчайшего пути (алгоритм Дейкстра), но мне надо её как то...

Алгоритм Дейкстры (нахождение кратчайшего пути)
Можно как то еще оптимизировать процедуру в плане скорости? или это предел для чистого QB? SUB ROUTE (S AS INTEGER, F AS INTEGER) ...

Нахождение кратчайшего пути в графе (алгоритм Дейкстры)
Здравствуйте, помогите пожалуйста, СРОЧНО,написать псевдокод реализации нахождения кратчайшего пути в графе на языке СИ. Ввод производиться...

37
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
10.12.2013, 20:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от VladSharikov Посмотреть сообщение
а в чем проблема создать вторую матрицу, где будут на местах весов имена ребер? Ты об этом?
Именно об этом.

Цитата Сообщение от VladSharikov Посмотреть сообщение
То есть два ребра из одного ребра в другое? Два или больше.
Вообще-то рёбра ведут из вершин в вершины...

Цитата Сообщение от VladSharikov Посмотреть сообщение
Дак если мы в матрицу включим минимальное, то и в матрицу имен мы включим название минимального ребра - раз.
Ну да.

Цитата Сообщение от VladSharikov Посмотреть сообщение
А во-вторых, у нас ведь в принципе будет одно ребро, не будет кратных.
Ну потому что они лишние. Какой смысл хранить рёбра, которые никогда не будут использованы?

Цитата Сообщение от VladSharikov Посмотреть сообщение
Дак интересно свое написать, опираясь на другой алгоритм, а не просто списать.
Ну так у тебя вроде как был алгоритм вначале. Что с ним-то стало?
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.12.2013, 03:58  [ТС]
Цитата Сообщение от Qwertiy Посмотреть сообщение
Вообще-то рёбра ведут из вершин в вершины...
Перепутал. Два ребра или больше из одной вершины в другую.

Цитата Сообщение от Qwertiy Посмотреть сообщение
Ну потому что они лишние. Какой смысл хранить рёбра, которые никогда не будут использованы?
то есть это нормальное обоснование: мы просто выбрали ребро с наименьшим весом, вместо нескольких.
Если будут из вершины 1 в вершину 2 вести три ребра с весами : a 2, b 2, c4, то какое мы выберем? Первое попавшееся?

Добавлено через 7 часов 4 минуты
Сделал кажется, результат:

Судите!

Алгоритм изложен выше. Маршрут искал через вектор P, как в статье на хабре. Восстановление маршрута в методе getPath(...).

Исходный код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  TMyGraph = class
    vertexNum: Integer;
    vertexSource: Integer;
 
    // input parameters
    vertexWeightsArray: array of array of Integer; // матрица с весами
    vertexNamesArray: array of String;
    edgesNamesArray: array of array of Char;
 
    // temp parameters
    vertexVisitedArray: array of  Boolean;
    routesVertexArray: array of Integer;
 
    // output parameters
    distances: array of Integer;
    paths: array of Integer;
  private
    procedure ReadFromFile;
  public
    procedure Init(_totalVertexNum, _vertexSource: Integer);
    procedure FindShortestPaths;
    function getPath(myVertex: Integer): String;
    function getPreviousVertex(vertex: Integer): Integer;
    procedure DrawResults(lv: TListView);
  end;
 
implementation
{ TGraph }
 
procedure TMyGraph.ReadFromFile;
var
  f: text;
  i, j: integer;
begin
  vertexWeightsArray := nil;
  AssignFile(f, 'input/input.txt');
  Reset(f);
  i := -1;
  while not Eof(f) do
  begin
    Inc(i);
    SetLength(vertexWeightsArray, i + 1);
    j:= -1;
    while not Eoln(f) do
    begin
      Inc(j);
      SetLength(vertexWeightsArray[i], j + 1);
      Read(f, vertexWeightsArray[i, j]);
    end;
    ReadLn(f);
  end;
  CloseFile(f);
 
  vertexNamesArray := nil;
  // тут считаем названия вершин
  AssignFile(f, 'input/names.txt');
  Reset(f);
  i := -1;
  while not Eof(f) do
  begin
    while not Eoln(f) do
    begin
      Inc(i);
      SetLength(vertexNamesArray, i + 1);
      Read(f, vertexNamesArray[i]);
    end;
    ReadLn(f);
  end;
  CloseFile(f);
 
  // тут считаем названия ребер
  edgesNamesArray := nil;
  AssignFile(f, 'input/edges.txt');
  Reset(f);
  i := -1;
  while not Eof(f) do
  begin
    Inc(i);
    SetLength(edgesNamesArray, i + 1);
    j:= -1;
    while not Eoln(f) do
    begin
      Inc(j);
      SetLength(edgesNamesArray[i], j + 1);
      Read(f, edgesNamesArray[i, j]);
      if edgesNamesArray[i, j] = ' ' then
        Dec(j);
    end;
    ReadLn(f);
  end;
  CloseFile(f);
end;
 
procedure TMyGraph.Init(_totalVertexNum, _vertexSource: Integer);
var
  i: Integer;
begin
  vertexNum := _totalVertexNum;
  vertexSource := _vertexSource-1;
 
  SetLength(distances, vertexNum);
  SetLength(vertexVisitedArray, vertexNum);
  SetLength(routesVertexArray, vertexNum);
 
  for i:=0 to 8 do
    routesVertexArray[i] := vertexSource;
 
  ReadFromFile;
end;
 
procedure TMyGraph.FindShortestPaths;
var count, index, i, u, min: integer;
begin
  for i:=0 to vertexNum-1 do
  begin
    distances[i]:=infinity;
    vertexVisitedArray[i]:=false;
  end;
  distances[vertexSource]:=0;
  for count:=1 to vertexNum-2 do
  begin
    min:=infinity;
    for i:=0 to vertexNum-1 do
    if (not vertexVisitedArray[i]) and (distances[i]<=min) then
    begin
      min:=distances[i]; index:=i;
    end;
    u:=index;
    vertexVisitedArray[u]:=true;
    for i:=0 to vertexNum-1 do
      if (not vertexVisitedArray[i]) and (vertexWeightsArray[u, i]<>0) and
      (distances[u]<>infinity) and (distances[u]+vertexWeightsArray[u, i]<distances[i]) then
      begin
        distances[i]:=distances[u]+vertexWeightsArray[u, i];
        routesVertexArray[i] := u;
      end;
  end;
end;
 
function TMyGraph.getPath(myVertex: Integer): String;
var
  curVertex, prevVertex, i: Integer;
  output: String;
begin
  i:=0;
  curVertex := myVertex;
  repeat
    SetLength(paths, i+1);
    paths[i] := curVertex;
    prevVertex := getPreviousVertex(curVertex);
    curVertex := prevVertex;
    Inc(i);
  until curVertex=vertexSource;
  SetLength(paths, i+1);
  paths[i] := curVertex;
 
  //output := vertexNamesArray[vertexSource] + ' ';
  while(i>0)do
  begin
    output := output + ' -('+ edgesNamesArray[paths[i], paths[i-1]] +')-> ' + vertexNamesArray[paths[i-1]];
    Dec(i);
  end;
  Result := output;
end;
 
function TMyGraph.getPreviousVertex(vertex: Integer): Integer;
begin
  Result := routesVertexArray[vertex];
end;
 
procedure TMyGraph.DrawResults(lv: TListView);
var
  i: Integer;
begin
  for i:=0 to vertexNum-1 do
  if i<>vertexSource then
  begin
    begin
      with lv.Items.Add do
      begin
        Caption := vertexNamesArray[i];
        SubItems.Add(IntToStr(distances[i]));
        SubItems.Add(getPath(i));
      end;
    end;
  end;
end;
В общем то, весь алгоритм в методе FindShortesPath. Судите.

Добавлено через 13 минут
опачки

кстати, пытаюсь скормить своему алгоритму ваш пример:
Алгоритм Дейкстры - нахождение кратчайшего маршрута до каждой вершины

ищет путь 1 - 2 - 4 и стоимостью 7, хотя должен искать 1 - 3 - 4 и стоимостью 5, правильно?

В чем может быть ошибка, Qwertiy?
А что вы правили? Buckstabue
Может я здесь же ошибся? За основу брал не твой алгоритм.

Добавлено через 5 минут
Поправил косяк. Мне нужно цикл выполнить столько раз, сколько у меня вершин - 1, для нахождения пути ДО КАЖДОЙ вершины, правильно? У меня почему то стояло 7 раз. Поправил, правильно обсчитывает твою матрицу. Стоимость 5, 1 - 3 - 4
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
12.12.2013, 02:04
VladSharikov, все изменения сделаны в функции getIndexOfVertexWithMinimalDistance()
Короче говоря, смотрите мой скриншот с конспектом в том самом посте. Там символ https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega (x_i) означает величину метки, символ https://www.cyberforum.ru/cgi-bin/latex.cgi?d (x_i) означает вес ребра.
Алгоритм элементарен: мы нашли кратчайший путь из A в B, при этом заполняли массив меток marks, изначально i = индекс вершины конца пути. Действуем следующим образом:
Пока i != индекс отправления:
смотрим все окрестные вершины i
ищем такую вершину j, которая удовлетворяет условию marks[j] + adjancedMatrix[j][i] == marks[i]
включаем полученную вершину в путь и делаем i = j
------------------------------------
У моей реализации алгоритма, скорее всего есть два недостатка:
1) не учтен тот факт, что изначально все вершины имеют метку, равную максимальному значению unsigned short, что-то вроде имитации бесконечности. Оданако! При прибавлении к такому числу любого положительного числа происходит переполнение разрядов и условие marks[j] + adjancedMatrix[j][i] == marks[i] может сработать в тот момент, когда marks[j] равно максиальному числу
2) скорее, всего, но не обязательно, моя реализация алгоритма рассчитана на неорграф. Чтобы сделать под орграф скорее всего надо передавать в функцию getIndexOfVertexWithMinimalDistance() не отдельный ряд матрицы смежности, а всю матрицу смежности и сверять путь правильным условием marks[j] + adjancedMatrix[j][i] == marks[i] какое я писал выше, а не текущим условием marks[j] + adjancedMatrix[i][j] == marks[i] , которое по идее неправильно, но проверять некогда
Исправление ошибок - дело пяти минут
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
12.12.2013, 02:13  [ТС]
Buckstabue, я свое уже натворил, буду работать над своим.
может есть графы с которыми моя программа не сработается?
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
12.12.2013, 11:09
Не знаю, протестируйте. Причем при тестировании считайте вес кратчайшего пути и сверяйте с полученным через алгоритм Дейкстры. Но лично мне кажется сомнительным восстановление пути по какому-либо массиву обхода вершин во время работы алгоритма
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
12.12.2013, 11:11  [ТС]
Во время работы массива ничего не восстанпвливается. А что сомнительно? Работает.
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
12.12.2013, 11:23
VladSharikov, cомнительно то, что во время работы алгоритма имеет какой-либо смысл сохранять вершины для пути, ведь алгоритм Дейкстры рассчитан на поиск расстояния всех вершин графа до заданной и в процессе работы куда он только не заходит, пока не достигнет той которую мы ищем. Просто возьмите большой граф и генерируйте любые сочетания двух вершин и в конце работы программы сверяйте. Мне поначалу показался тоже вполне логичным тот алгоритм, что написал вначале
В чем ваш алгоритм заключается?
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
12.12.2013, 13:00
Цитата Сообщение от Buckstabue Посмотреть сообщение
Но лично мне кажется сомнительным восстановление пути по какому-либо массиву обхода вершин во время работы алгоритма
Ну и зря. Так всегда и делается.
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
12.12.2013, 13:32  [ТС]
Цитата Сообщение от Buckstabue Посмотреть сообщение
В чем ваш алгоритм заключается?
Есть некий массив P, в нем есть столько элементов, сколько у нас есть вершин. Во все элементы запишем источник. При изменении метки вершины с большей на меньшую записываем на место этой вершины текущую вершину.
Например, мы сейчас в 5 вершине, проверяем метку 10 вершины, она изменилась на 3, например, значит на 10 (или на 9, если с 0 индекса идет счет) место поставим 5. И так далее. В итоге, у нас получиться массив из разных чисел. Например, мы хотим узнать как добраться до вершины 10. Для восстановления пути в 10 вершину запомним 10 вершину. Смотрим 10 элемент массива - там 5. Запомним 5. Смотрим 5 эл. массива, там, например 3 (а это источник). Запомним 3. В итоге получиться 10, 5, 3. Выведем в обратном порядке, это и будет путь. Что сомнительно? Подробнее читайте в статье с хабра из 1 поста. Все работает при любом количестве вершин, думаю.
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
12.12.2013, 22:21
VladSharikov, нет времени проверять алгоритм, не могли бы вы рассказать, как он будет работать на таком графе? Путь из 1->3
Миниатюры
Алгоритм Дейкстры - нахождение кратчайшего маршрута до каждой вершины  
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
12.12.2013, 23:10  [ТС]
Слишком маленький граф.
Могу показать на своем : http://habr.habrastorage.org/c... a80979.jpg

1) R7 - метка 0, остальные оо.
Вектор P = 7 7 7 7 7 7 7 7 7
2) R3 - метка 8 должны изменить 3 позицию вектора P на 7. Изменили. Осталось так же. P = 7 7 7 7 7 7 7 7 7
R5 - метка 1, в 5 позицию поставим 7. Опять так же. P = 7 7 7 7 7 7 7 7 7
R6 - метка 1, R8 метка 1. Вектора не изменяться. P = 7 7 7 7 7 7 7 7 7
3) Минимальная метка у R5. R7 рассмотрена, R1 - метка 8. На место R1 поставим текущую вершину, то есть 5.
P = 5 7 7 7 7 7 7 7 7
4) Минимальная у R6, R7 рассмотрена, если пойдем в R8, то метка не измениться, вектор P не измениться. В R3: метка станет 3, измениться вектор P. P = 5 7 6 7 7 7 7 7 7. R4 метка станет 8. На 4м месте поставим текущую вершину - 6. P = 5 7 6 6 7 7 7 7 7.
5) Минимальная у R8. Все вокруг рассмотрено. Все останется как есть.
6) минимальная у R3. Все кроме R2 рассмотрено. Метка R2 стала 7. В массив запишем на второе место текущую вершину - 3. P = 5 3 6 6 7 7 7 7 7.
7) Минимальная у кого? R2 кажется. Если сунемся в R1 - ничего не измениться. В R4, ничего не измениться, в R9 - метка R9 станет 13. На 9 место в векторе Р запишем текущую вершину - 2. P = 5 3 6 6 7 7 7 7 2.
8) мин у R1. Все рассмотрено вокруг. Все как есть.
9) мин у R4. R2 рассмотрена, с R9 работаем. Метка R9 станет 8+2 = 12<13, значит метка измениться. Запишем на 9 место текущую вершину - 4. P = 5 3 6 6 7 7 7 7 4.
Все вершины рассмотрены.

P = 5 3 6 6 7 7 7 7 2 - вектор ПЭ.
Для восстановления пути из 7 в 1: смотрим 1 значение - там 5, смотрим 5 значение - там 7. Пришли в источник. Путь: 1 <- 5 <- 7.
Для восстановления пути из 7 в 2: смотрим 2 значение - там 3, смотрим 3 - там 6, смотрим 7 - там 7. Значит путь 2<-3<-6<-7. Правильно?
Для 7->3: сморим 3 - там 6, смотрим 6 - там 7. 3<-6<-7
Для 7->4: смотрим 4 - там 6, смотрим 6 - там 7. 4<-6<-7
Для 7 в 5, 6, 8 - один путь: 5,6,8<-7
Для 7->9: смотрим 9- там 4, смотрим 4 - там 3, смотрим 3 - там 6, смотрим 6 - там 7. 9<-4<-6<-7.
Все пути восстановлены, лаба зачтена
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
13.12.2013, 11:40
VladSharikov, граф-то может и маленький, но с моей точки зрения отлично показывает бессмысленность сохранения пути во время обхода и у меня есть подозрения, что подобные алгоритмы будут тупить
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
13.12.2013, 11:48  [ТС]
Buckstabue, в векторе просто останется P = {1,1} в вашем случае. Значит Для второй вершины 2<-1, для третьей 3<-1, вот и все. Но дело ваше. Пока ни разу проблем не было.

Добавлено через 4 минуты
Алгоритм Дейкстры - нахождение кратчайшего маршрута до каждой вершины
этот пример работает правильно
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
13.12.2013, 11:51  [ТС]
Ваш граф :

p.s.: на буковки не надо смотреть, матрица осталась от моего варианта.



p.p.s.: вот еще что нужно сделать.
может придет в голову как это сделать?

вообще, неформальное описание задачи такое: дана сеть роутеров и компьютеров. у меня, например, были только кружки - только роутеры. в некоторых случаях есть и компьютеры (хосты). Особенность хоста в том, что до него можно найти путь, но он не участвует в нахождении других маршрутов, то есть нельзя через него проложить путь.

Как это можно задать в программе?
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
13.12.2013, 12:09
Цитата Сообщение от VladSharikov Посмотреть сообщение
Особенность хоста в том, что до него можно найти путь, но он не участвует в нахождении других маршрутов, то есть нельзя через него проложить путь.
Заменить его двумя вершинами.
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
13.12.2013, 12:35  [ТС]
? В смысле. Поясни, пожалуйста
1
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
13.12.2013, 13:25
Цитата Сообщение от VladSharikov Посмотреть сообщение
В смысле.
Ой.. Я перемудрил... Надо просто не делать из него исходящих рёбер.
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
13.12.2013, 20:51  [ТС]
Блин, ты башка ваще)))
Спасибо огромное)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2013, 20:51
Помогаю со студенческими работами здесь

Нахождение кратчайшего пути между заданными городами (алгоритм Дейкстры)
Народ, подскажите пожалуйста, на кону допуск к сессии. Чего то я запутался с этими списками. Буду оень признателен. &quot;Разработать...

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

Алгоритм поиска кратчайшего маршрута
Моё почтение всем! Буду ОЧЕНЬ благодарен тому, кто сможет мне помочь найти алгоритм (или исходник на VB )поиска кратчайшего маршрута ...

Алгоритм Дейкстры с выдачей маршрута
С большим трудом вник в саму суть алгоритма, сделать же выдачу маршрута не получается совсем. Дело в том что видел где то, что алгоритм...

Алгоритм решения задачи по определению кратчайшего маршрута
Как определить кратчайший маршрут, проходящий через все населенные пункты? &quot;В лоб&quot; не хочется, а как &quot;цивилизовано&quot;? Начал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru