Künstliche Intelligenz mit Minetest

Open Source Voxel-Engine, https://www.minetest.net

minetest-5.4.1-win64_ocg_version.zip
ocg_reserve_welt.zip

minetest-itemstrings-cheatsheet.pdf

Python Cheat Sheet

Steuerung

https://wiki.minetest.net/Controls

W
ASD
Leertaste:Springen
Maus:Blickrichtung
Doppel Leertaste:Fliegen (aber zuerst Privileg verleihen)
Shift:zu Boden sinken
C:third person view
V:Minimap
J:Fast Mode
F5:Debug Info und Koordinaten
T:Öffnet Chat Fenster
Zum Beispiel 277 22 -276
i:Inventar

Koordinaten






Chat Kommandos

Wie oben erwähnt öffnet "T" das Chat-Fenster. Was ist das Chat-Fenster? Hier kann man normalerweise Nachrichten an andere oder alle Spieler schicken. Wir befinden uns im Workshop aber im Singleplayer-Modus, dadurch spielt die Chatfunktion für Unterhaltungen keine Rolle.
Die Chatfunktion hat aber noch eine andere Funktion. Stellt man im Chatfenster der Eingabe ein "/" (über der 7) voran dann erwartet das System keine Nachricht sondern einen Befehl (ein Kommando) der ausgeführt wird.

Hier ein paar Beispiele für Chat-Kommandos:
/grant <your-user-name> fly
/grant singleplayer all
/time 6000
/teleport 0,0,0

Erklärung:

Zeile 1 erteilt dem Spieler mit angegebenem Namen das Flugprivileg
Zeile 2: Im Singleplayer-Modus hat der aktuell angemeldete Spieler den Namen "singleplayer". Durch den Aufruf werden dem angemeldeten Spieler alle Privilegien erteilt.
Zeile 3: Die Uhrzeit wird auf 6:00 Uhr morgens gestellt. Den Befehle kannst du verwenden, wenn es hell bleiben soll.
Zeile 4 teleportiert den Spieler an den Ort 0,0,0. Aber Achtung! Ermittle vorher über F5 an welchen Koordinaten du dich befindest, damit du zurückkehren kannst.

Oben haben wir gesehen, dass mittels "/" spezielle Befehle an das System geschickt werden können. Hier kommt eine für uns ganz wichtige zusätzliche Möglichkeit dazu:
Man kann nämlich auch eigene Chat-Kommandos festlegen und dort einen Befehl und zusätzlich ein eigenes Programm festlegen, welches ausgeführt wird wenn der zugehörige Befehl nach dem "/" eingegeben wird.

Funktion

Hier erklären wir, was eine Funktion ist. Das sollte man verstehen, wenn man die Einbindung eines chat-Kommandos verstehen möchte. Das ist aber für den Workshop nicht unbedingt notwendig.


function ausgabe(a, b)
	minetest.chat_send_all(a .. " " .. b)
end

function addiere(a, b)
	return a + b
end

Aufruf:

	...
	ausgabe(5, 3)
	minetest.chat_send_all(addiere(5, 3))
	...

Ausgabe:
5 3
8
done
Erklärung:

"ausgabe" und "addiere" sind die Namen der Funktionen über die sie aufgerufen werden. a und b nennt man die Parameter. Damit können der Funktion Werte übergeben werden. Damit sage ich der Funktion addiere was zusammengezählt werden soll. Funktionen können einen Rückgabewert haben (so wie addiere) müssen aber nicht (so wie ausgabe). Wichtig bei einer Funktion ist, dass sie nicht sofort ausgeführt wird, sondern erst wenn die Funktion, über ihren Namen, aufgerufen wird. Das ist eine wichtige Eigenschaft.

Objekte

Ein Objekt verfügt über:
Attribute
Methoden

auto.preisliefert 15.000
auto.psliefert 120
auto.start()startet das Auto
auto.stop()schaltet das Auto aus

Bei Aufruf der Methoden können sich Zustände ändern oder auch Ergebnisse abgefragt und zurückgegeben werden.

Das erste Programm

Bemerkung: Alle Programme im Workshop werden so ähnlich aussehen.

minetest.register_chatcommand("hello1", {
    func = function(playername, param)
		return true, "hello world!"
    end,
})

Schauen wir uns das Programm genauer an:


Erklärung:

Die Methode "register_chatcommand" des Objekts minetest (hier können wir auf die momentane Welt zugreifen) wird aufgerufen.
Der erste Übergabewert ist der gewünschte Name des chat-Kommandos. In unserem Fall ist das "hello1".
Zweiter übergebener Wert ist eine Liste und das erste (und einzige) Element dieser Liste ist eine Funktionsdefinition. Diese Funktionsdefinition wird nicht gleich aufgerufen sondern für die spätere Verwendung gespeichert.
Wird nun im System das chat-Kommando "hello1" abgesetzt und erkannt, erst dann wird die zuvor bei der Registrierung gespeicherte Funktion ausgeführt.

Probieren wir das aus und schauen wir was passiert!

siehe auch:
Learn Lua in 15 Minutes
(Für Workshop nicht unbedingt notwendig)

Mods

Sogenannte Mods liegen im Verzeichnis:
<Minetest Vereichnis>/mods/

Für unseren Mod (ocg) ist folgendes wichtig:
<Minetest Vereichnis>/mods/ocg/init.lua

Neue Mods müssen aktiviert werden:



In unserem Fall ist das aber nicht notwendig. Der Mod ist bereits aktiviert.

Wichtig!: Bei einer Änderung im Code des Mode muss man ins Hauptmenü gehen und die Welt neu starten um den Mod neu zu laden.


Du hast jetzt einiges über Minetest-Programmierung gelernt und bist jetzt bereit vorbereitete Programme anzuschauen, auszuprobieren und zu bearbeiten oder sogar eigene Projekte durchzuführen.
Beim Studium der vorbereiteten Programme werden dir einige Meilensteine des Programmierens begegnen, die wir dann anhand des Programms erklären:
Variable
if else ...
for-Schleife
Random-Methode
Table
...

Idee für eigene Projekte:
Chat-Kommando "set_blockbelow" mit Parameter um beliebige Blocktypen zu erzeugen (siehe dazu minetest-itemstrings-cheatsheet.pdf oben).
Chat-Kommando "set_blockbelow" verändern, sodaß der Block nur ersetzt wird wenn ein bestimmter Blocktyp vorlag (mittels if-Bedingung).


Random Walk - zufällige Schrittfolge



Wer kann erraten, was mit obiger Abbildung gemeint ist?

https://de.wikipedia.org/wiki/Random_Walk

Ergebnis:


Ist dieses Verhalten intelligent?

Irrgarten



Was für Eigenschaften braucht eine Person / ein Roboter um aus dem Labyrinth zu kommen
a) Jemand, der über die Mauer sehen kann?
b) Jemand, der nicht über die Mauer sehen kann?

Künstliche Intelligenz - KI / AI

Was ist eigentlich intelligent?

Definition

KI ist der Teil der Informatik, der sich mit dem Entwurf intelligenter Computersysteme befasst, die die Eigenschaften aufweisen, die wir mit Intelligenz im menschlichen Verhalten assoziieren - Sprachverständnis, Lernen, logisches Denken, Problemlösung und so weiter. (Barr und Feigenbaum, 1981: 3)

→ Systeme die Eigenschaften menschlicher Intelligenz aufweisen.

Wir definieren KI als das Studium von Agenten, die Vorgaben aus der Umwelt erhalten und Handlungen ausführen. [Im Idealfall führt ein intelligenter Agent die bestmögliche Handlung in einer Situation aus. (Russel und Norvig, 2010: viii, 30)

→ Systeme die sich intelligent verhalten.

In beiden Fällen wird nicht darüber gesprochen wie das intelligente Verhalten erzielt wird. Anders als von vielen fälschlich vermutet verlangt der Begriff der Künstlichen Intelligenz nicht den Einsatz von bestimmten Technologien und Verfahren.

siehe: https://hackernoon.com/are-you-using-the-term-ai-incorrectly-911ac23ab4f5