Neuronale Netze

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von wolfi_bayern.

    Neuronale Netze

    Guten Abend zusammen,

    ich programmier momentan ein Schiffeversenken als Schulprojekt. Das Projekt ist soweit fertig jedoch habe ich gestern Abend ein Video über Neuronale Netze gesehen und war sehr interessiert wie sowas funktioniert.
    Nach einigen Stunden Videomaterial auf Youtube, habe ich das Prinzip verstanden jedoch möchte ich ein Neuronale Netz in mein Schiffeversenken einbauen bzw. als KI welche lernt Schiffe richtig und schnell zu setzten.

    Und da häng ich momentan.
    Ich hab völlig keine Ahnung wie ich das in mein Projekt einbauen soll. ?(

    Ich hab folgende Funktionen geschrieben welche mir das Leben erleichtern:

    Funktion welche prüft ob sich das momentane Schiff in einem anderen befindet.
    Spoiler anzeigen

    C#-Quellcode

    1. private bool insideShip(int shipLeft, int shipTop, bool shipRotate, Ship.ShipType shipType)
    2. {
    3. List<List<int>> allShips = new List<List<int>>();
    4. foreach (var ship in _ships)
    5. {
    6. for (int i = 0; i < (int)ship.Type; i++)
    7. {
    8. if (ship.rotate)
    9. {
    10. allShips.Add(new List<int> { ship.X, ship.Y + i });
    11. }
    12. else
    13. {
    14. allShips.Add(new List<int> { ship.X + i, ship.Y });
    15. }
    16. }
    17. }
    18. if (!shipRotate)
    19. {
    20. foreach (var ship in allShips)
    21. {
    22. for (int i = 0; i < (int)shipType; i++)
    23. {
    24. int s1 = ship[0];
    25. int s2 = ship[1];
    26. int d1 = shipLeft + i;
    27. int d2 = shipTop;
    28. if (d2 == s2 && s1 == d1)
    29. {
    30. return true;
    31. }
    32. }
    33. }
    34. }
    35. else
    36. {
    37. foreach (var ship in allShips)
    38. {
    39. for (int i = 0; i < (int)shipType; i++)
    40. {
    41. int s1 = ship[0];
    42. int s2 = ship[1];
    43. int d1 = shipLeft;
    44. int d2 = shipTop + i;
    45. if (d2 == s2 && s1 == d1)
    46. {
    47. return true;
    48. }
    49. }
    50. }
    51. }
    52. return false;
    53. }


    Und eine Funktion welche mir ein null Wert zurück gibt sobald das Schiff im nächstem Schritt das Feld verlassen würde
    Spoiler anzeigen

    C#-Quellcode

    1. public List<int> GetCursorPosByCordinates(int X, int Y)
    2. {
    3. int keyIndex = Cordinates.Value.FindIndex(index => index[0] == X && index[1] == Y);
    4. if (keyIndex == -1)
    5. {
    6. return null;
    7. }
    8. return Cordinates.Key[keyIndex];
    9. }


    Die beiden Funktionen bieten mir als Spieler keine Möglichkeit ein Schiff "ungültig" zu setzten..
    Klar könnte ich bis zu mein Lebensende mit Randoms arbeiten, aber das ist ziemlich langweilig.

    Vielen Dank schon mal im Voraus!!
    Willkommen im Forum.

    Ich musste erstmal den Code ein paar mal lesen, bevor ich erkannte, dass da einige Variablen etwas ... irreführende Namen haben. Statt rotate wäre isPlacedVertical aussagekräftiger. Und allShips: -> coordinatesOfAllShips

    Ich hab nicht so viel Ahnung von neuronalen Netzen, aber wäre es nicht einfacher, einfach nach freien Stellen im Brett zu scannen oder geht es Dir darum, dass die KI lernt, strategisch zu platzieren?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    An den Namen der Funktion arbeite ich noch.

    VaporiZed schrieb:

    Ich hab nicht so viel Ahnung von neuronalen Netzen, aber wäre es nicht einfacher, einfach nach freien Stellen im Brett zu scannen oder geht es Dir darum, dass die KI lernt, strategisch zu platzieren?


    Klar könnte ich sagen, "Hey da ist noch Platz" aber das wäre viel zu einfach. Die Schiffe (wie du schon sagtest) müssen strategisch gesetzt werden.. :huh: