<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Johnson-Algorithmus</id>
	<title>Johnson-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Johnson-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Johnson-Algorithmus&amp;action=history"/>
	<updated>2026-05-25T01:57:17Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Johnson-Algorithmus&amp;diff=277671&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: form</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Johnson-Algorithmus&amp;diff=277671&amp;oldid=prev"/>
		<updated>2022-11-20T16:10:34Z</updated>

		<summary type="html">&lt;p&gt;form&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Johnson-Algorithmus&amp;#039;&amp;#039;&amp;#039; ist ein Optimierungsverfahren für Warteschlangen, das 1954 von [[Selmer M. Johnson]] vorgestellt wurde. Es findet unter anderem bei der [[Scheduling|Reihenfolgeplanung]] zur Bestimmung der minimalen Zykluszeit in der [[Produktionswirtschaft]] Anwendung.&lt;br /&gt;
&lt;br /&gt;
Der Johnson-[[Algorithmus]] liefert eine hinsichtlich der Zykluszeit optimale Reihenfolge von unbestimmt vielen Aufträgen, die jeweils auf genau zwei Maschinen nacheinander bearbeitet werden sollen. Der Algorithmus lässt sich auf mehr als zwei Maschinen verallgemeinern, indem Hilfsprobleme erzeugt werden.&lt;br /&gt;
&lt;br /&gt;
== Der Algorithmus ==&lt;br /&gt;
[[Datei:Johnson-verfahren.png|miniatur|400px|Optimale Maschinenbelegung]]&lt;br /&gt;
&lt;br /&gt;
Es existiert ein Stapel mit unbestimmt vielen Aufträgen &amp;lt;math&amp;gt;A_n&amp;lt;/math&amp;gt;, die in einer optimalen Reihenfolge bezüglich der [[Zykluszeit (Produktion)|Zykluszeit]] &amp;#039;&amp;#039;auf genau zwei&amp;#039;&amp;#039; [[Maschine]]n / [[Prozessor]]en &amp;lt;math&amp;gt;M_j&amp;lt;/math&amp;gt; nacheinander bearbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
Beispiel: Fünf Aufträge mit unterschiedlichen Bearbeitungszeiten sollen Zykluszeit-optimal jeweils zuerst auf der Maschine &amp;lt;math&amp;gt;M_1&amp;lt;/math&amp;gt; und danach auf der Maschine &amp;lt;math&amp;gt;M_2&amp;lt;/math&amp;gt; bearbeitet werden. Die folgende Tabelle gibt an, wie viel Zeit (in&amp;amp;nbsp;ZE) ein Auftrag &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; auf einer Maschine &amp;lt;math&amp;gt;M_j&amp;lt;/math&amp;gt; benötigt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !&lt;br /&gt;
 !align=&amp;quot;center&amp;quot;| &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 !align=&amp;quot;center&amp;quot;| &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 !align=&amp;quot;center&amp;quot;| &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 !align=&amp;quot;center&amp;quot;| &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 !align=&amp;quot;center&amp;quot;| &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 |-&lt;br /&gt;
 !valign=&amp;quot;middle&amp;quot; | &amp;#039;&amp;#039;M&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 14&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 12&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 13&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 11&lt;br /&gt;
 |-&lt;br /&gt;
 !valign=&amp;quot;middle&amp;quot; | &amp;#039;&amp;#039;M&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 13&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 8&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
 |align=&amp;quot;center&amp;quot; | 14&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Alternative 1 ===&lt;br /&gt;
==== Beschreibung der iterativen Vorschrift ====&lt;br /&gt;
Das Problem kann mit folgender [[Iteration|iterativer]] Vorschrift gelöst werden:&lt;br /&gt;
&lt;br /&gt;
# Suche den Auftrag &amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; mit der absolut kürzesten Bearbeitungszeit&lt;br /&gt;
# Entscheide:&lt;br /&gt;
#* Falls &amp;lt;math&amp;gt;j=1&amp;lt;/math&amp;gt;: Ordne den Auftrag &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; so weit &amp;#039;&amp;#039;&amp;#039;vorn&amp;#039;&amp;#039;&amp;#039; wie möglich in der Reihenfolge an&lt;br /&gt;
#* Falls &amp;lt;math&amp;gt;j=2&amp;lt;/math&amp;gt;: Ordne den Auftrag &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; so weit &amp;#039;&amp;#039;&amp;#039;hinten&amp;#039;&amp;#039;&amp;#039; wie möglich in der Reihenfolge an&lt;br /&gt;
# fahre fort bei 1. solange bis jeder Auftrag zugeordnet ist.&lt;br /&gt;
&lt;br /&gt;
Der Johnson-Algorithmus sucht sich jetzt den kürzesten Auftrag, also &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; mit 4&amp;amp;nbsp;ZE. Da &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; auf &amp;lt;math&amp;gt;M_2 (j=2)&amp;lt;/math&amp;gt; am wenigsten Zeit benötigt, wird er in der neuen Reihenfolge so weit wie möglich hinten eingeordnet.&lt;br /&gt;
&lt;br /&gt;
Der nächst-kürzeste Auftrag ist &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; mit 7&amp;amp;nbsp;ZE. Da &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; auf &amp;lt;math&amp;gt;M_1&amp;lt;/math&amp;gt; am wenigsten Zeit benötigt, wird er in der neuen Reihenfolge so weit vorn wie möglich eingeordnet usw.&lt;br /&gt;
&lt;br /&gt;
==== Beispiel zur iterativen Implementation ====&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wird der Algorithmus anhand eines Beispiels demonstriert. Die Formatierungen haben folgende Bedeutung:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;als kürzeste Laufzeit identifizierter Wert&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;bereits sequenzierter Auftrag&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Der Startzustand umfasst eine zufällige Auftragsreihenfolge:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A1 ||A2 ||A3 ||A4 ||A5 ||A6 ||A7 ||A8&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||12 ||7 ||4 ||3 ||10 ||5 ||6 ||7&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||8  ||6 ||9 ||6 ||&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;  ||8 ||9 ||7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 1:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A1 ||A2 ||A3 ||A4 ||A6 ||A7 ||A8 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||12 ||7 ||4 ||&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; ||5 ||6 ||7 ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||8  ||6 ||9 ||6 ||8 ||9 ||7 ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 2:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A1 ||A2 ||A3 ||A6 ||A7 ||A8 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||12 ||7 ||&amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; ||5 ||6 ||7 ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||8  ||6 ||9 ||8 ||9 ||7 ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 3:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A3 ||A1 ||A2 ||A6 ||A7 ||A8 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;4&amp;#039;&amp;#039; ||12 ||7 ||&amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039; ||6 ||7 ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||8  ||6 ||8 ||9 ||7 ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 4:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A3 ||A6 ||A1 ||A2 ||A7 ||A8 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;4&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;5&amp;#039;&amp;#039; ||12 ||7 ||&amp;#039;&amp;#039;&amp;#039;6&amp;#039;&amp;#039;&amp;#039; ||7 ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;8&amp;#039;&amp;#039; ||8  ||6 ||9 ||7 ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 5:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A3 ||A6 ||A7 ||A1 ||A2 ||A8 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;4&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;5&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||12 ||7 ||7 ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;8&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||8  ||&amp;#039;&amp;#039;&amp;#039;6&amp;#039;&amp;#039;&amp;#039; ||7 ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zustand 6 (Endzustand a):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A3 ||A6 ||A7 ||A1 ||A8 ||A2 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;4&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;5&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||12 ||&amp;#039;&amp;#039;&amp;#039;7&amp;#039;&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;7&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;8&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||8  ||7 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Hier wäre der Algorithmus theoretisch schon zu Ende, bei einer Implementierung kann jedoch noch ein weiterer Zustand aufgrund verschiedener Elementsgrößenüberprüfung angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Zustand 7 (Endzustand b):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
|x ||A4 ||A3 ||A6 ||A7 ||A8 ||A1 ||A2 ||A5&lt;br /&gt;
|-&lt;br /&gt;
|M1 ||&amp;#039;&amp;#039;3&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;4&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;5&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;7&amp;#039;&amp;#039; ||12 ||&amp;#039;&amp;#039;7&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|M2 ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;8&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;9&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;7&amp;#039;&amp;#039; ||8  ||&amp;#039;&amp;#039;6&amp;#039;&amp;#039; ||&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Es gibt bei diesem Beispiel somit 2 richtige Ergebnisse.&lt;br /&gt;
&lt;br /&gt;
=== Alternative 2 ===&lt;br /&gt;
# Bilde eine Gruppe von Aufträgen mit Bearbeitungszeit, die auf der ersten Maschine kürzer sind, als auf der zweiten.&lt;br /&gt;
#* Sortiere diese Gruppe &amp;#039;&amp;#039;&amp;#039;aufsteigend&amp;#039;&amp;#039;&amp;#039; nach der Bearbeitungszeit auf Maschine&amp;amp;nbsp;1.&lt;br /&gt;
# Bilde eine zweite Gruppe mit restlichen Aufträgen.&lt;br /&gt;
#* Sortiere sie &amp;#039;&amp;#039;&amp;#039;absteigend&amp;#039;&amp;#039;&amp;#039; nach der Bearbeitungszeit auf Maschine&amp;amp;nbsp;2.&lt;br /&gt;
&lt;br /&gt;
Die Aufträge &amp;lt;math&amp;gt;A_2 (M_1=12), A_3 (M_1=7), A_5 (M_1=11)&amp;lt;/math&amp;gt; bilden die erste Gruppe. Die Sortierung nach der kürzesten Bearbeitungsdauer auf der Maschine &amp;#039;&amp;#039;M&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; ergibt den ersten Teil der Lösung: &amp;lt;math&amp;gt;A_3\to A_5\to A_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die zweite Gruppe enthält die Aufträge &amp;lt;math&amp;gt;A_1 (M_2=4), A_4 (M_2=9)&amp;lt;/math&amp;gt;. Die Sortierung nach der längsten Bearbeitungsdauer auf der Maschine &amp;lt;math&amp;gt;M_2&amp;lt;/math&amp;gt; ergibt den zweiten Teil der Lösung: &amp;lt;math&amp;gt;A_4\to A_1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die durchlaufzeitoptimale Reihenfolge für dieses Beispiel ist demnach: &amp;lt;math&amp;gt;A_3\to A_5\to A_2\to A_4\to A_1&amp;lt;/math&amp;gt;. Die Abbildung „Optimale Maschinenbelegung“ stellt die optimale Lösung grafisch dar.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Selmer Martin Johnson: &amp;#039;&amp;#039;Optimal two- and three-stage production schedules with setup times included&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;Naval Research Logistics Quarterly&amp;#039;&amp;#039;, vol. 1, iss. 1, 1954, S. 61–68.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://ieda.ust.hk/dfaculty/ajay/courses/ieem513/GT/johnson.html Johnson&amp;#039;s Algorithm For Scheduling] Ajay Joneja, The Hong Kong University of Science and Technology&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Maschinenbelegungsplanung]]&lt;br /&gt;
[[Kategorie:Betriebssystemtheorie]]&lt;br /&gt;
[[Kategorie:Optimierungsalgorithmus]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>