Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
d7606262d8
@ -1,2 +1,3 @@
|
|||||||
Repozytorium projektu z sztucznej inteligencji, temat "Inteligentny wózek widłowy".
|
Repozytorium projektu z sztucznej inteligencji, temat "Inteligentny wózek widłowy". <br>
|
||||||
|
|
||||||
|
Zespół: 444420, 444428, 444430
|
44
environment.md
Normal file
44
environment.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Raport 1
|
||||||
|
|
||||||
|
### Środowisko
|
||||||
|
Środowiskiem agenta jest plansza (mapa magazynu), która jest podzielona na pola. Każde pole może być puste lub zajęte.
|
||||||
|
Agent może się poruszać tylko po polach pustych. Na polach zajętych znajdują się regały, na których przechowywane jest towar. Regały są zaznaczone za pomocą funkcji `pokolorujRegaly()`
|
||||||
|
Plansza ma wymiar 11 kolumn indeksowanych od 0 do 11 i 7 wierszy indeksowanych od 0 do 6. Pola mogą być ponumerowane dzięki funkcji `ponumerujPola()`.
|
||||||
|
|
||||||
|
### Agent
|
||||||
|
|
||||||
|
Agent jest reprezentowany za pomocą klasy `Agent`.
|
||||||
|
Agent jest wyświetlany na planszy przy użyciu ikony wózka widłowego (`umiescAgenta()`).
|
||||||
|
Agent porusza się po dzięki metodzie `przemieszczenie()`, która najpierw usuwa agenta z planszy (funkcja: `usunAgenta()`) nasępnie przesuwa go metodami `right()`, `left()`,
|
||||||
|
`up()`, `down()` i umieszcza go na nowej pozycji (funkcja: `umiescAgenta()`). Droga agenta jest ustala funkcją `droga()`.Przykład drogi agenta https://youtu.be/RLe2ZN5SFLo.
|
||||||
|
|
||||||
|
### Reprezentacja wiedzy
|
||||||
|
|
||||||
|
Klasa `Field` - reprezentuje pola w magazynie. Posiada pola:
|
||||||
|
- `x` - współrzędna x
|
||||||
|
- `y` - współrzędna y
|
||||||
|
- `isEmpty` - określa czy pole jest puste, czy nie.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Klasa `Product` - reprezentuje poszczególne produkty znajdujące się w magazynie. Posiada pola:
|
||||||
|
- `name` - nazwa produktu
|
||||||
|
- `type` - rodzaj produktu
|
||||||
|
- `specs` - krótki opis produktu
|
||||||
|
- `price` - cena produktu
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Klasa `Rack` - reprezentuje regały, które znajdują się w magazynie. Na jednym regale mogą znajdować się pordukty tego samego typu. Posiada pola:
|
||||||
|
- `noOfShelf` - liczbę półek danego regału
|
||||||
|
|
||||||
|
|
||||||
|
Metody:
|
||||||
|
- `addShelf()` - dodającą półkę do regału
|
||||||
|
- `isEmpty()` - zwracającą **true**, jeśli regał nie ma żadnych półek lub **false** w przeciwnym wypadku
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
Klasa `Shelf` - reprezentuje półkę, w regale. Na jednej półce mogą znajdować się produkty o tej samej specyfikacji. Posiada pola:
|
||||||
|
- `number` - numer półki
|
||||||
|
- `typOfProduct` - rodzaj produktu, jaki znajduję się na półce
|
87
frontend/js/Archiwum/Agent.js
Normal file
87
frontend/js/Archiwum/Agent.js
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
export default class Agent{
|
||||||
|
constructor(positionX, positionY, turn){
|
||||||
|
this.positionX = positionX;
|
||||||
|
this.positionY = positionY;
|
||||||
|
this.turn = turn;
|
||||||
|
}
|
||||||
|
|
||||||
|
getParams(){
|
||||||
|
let params = {};
|
||||||
|
|
||||||
|
positionX = this.positionX;
|
||||||
|
positionY = this.positionY;
|
||||||
|
turn = this.turn;
|
||||||
|
|
||||||
|
params = {positionX, positionY, turn};
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
goForward(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.positionY += 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.positionY -= 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.positionX -= 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.positionX += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
turnLeft(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.turn = 'Left';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.turn = 'Right';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.turn = 'Down';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.turn = 'Up'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
turnRight(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.turn = 'Right';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.turn = 'Left';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.turn = 'Up';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.turn = 'Down'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showAgent(){
|
||||||
|
console.log(this.turn)
|
||||||
|
if(this.turn === "Up"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Up.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Down"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Down.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Right"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Right.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Left"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Left.png')";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hideAgent(){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
30
frontend/js/Archiwum/Board.js
Normal file
30
frontend/js/Archiwum/Board.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import Field from './Field.js'
|
||||||
|
|
||||||
|
export function createBoard(rangeX, rangeY){
|
||||||
|
const board = [];
|
||||||
|
|
||||||
|
for(let y = 0; y < rangeY; y++){
|
||||||
|
const row = [];
|
||||||
|
for(let x = 0; x < rangeX; x++){
|
||||||
|
let field = new Field(x, y, false, false, 1);
|
||||||
|
row.push(field)
|
||||||
|
}
|
||||||
|
board.push(row)
|
||||||
|
}
|
||||||
|
return board
|
||||||
|
}
|
||||||
|
|
||||||
|
export function showBoard(board){
|
||||||
|
for(let y = board.length - 1; y >= 0 ; y--){
|
||||||
|
document.getElementById("board").innerHTML += "<div class='row' id='row-" + y + "'> </div>";
|
||||||
|
|
||||||
|
for(let x = 0; x < board[y].length; x++){
|
||||||
|
document.getElementById("row-" + y).innerHTML += "<div class='field' id=" + x + "-" + y + "> </div>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
22
frontend/js/Archiwum/Field.js
Normal file
22
frontend/js/Archiwum/Field.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
export default class Field{
|
||||||
|
constructor(x, y, isShelf, isOccupiedByAgent, costOfTravel){
|
||||||
|
this.xField = x;
|
||||||
|
this.yField = y;
|
||||||
|
this.isShelf = isShelf;
|
||||||
|
this.isOccupiedByAgent = isOccupiedByAgent;
|
||||||
|
this.costOfTravel = costOfTravel;
|
||||||
|
}
|
||||||
|
|
||||||
|
getParams(){
|
||||||
|
let params = {};
|
||||||
|
|
||||||
|
xField = this.xField;
|
||||||
|
yField = this.yField;
|
||||||
|
isShelf = this.isShelf;
|
||||||
|
isOccupiedByAgent = this.isOccupiedByAgent;
|
||||||
|
costOfTravel = this.costOfTravel;
|
||||||
|
params = {xField, yField, isShelf, isOccupiedByAgent, costOfTravel}
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
}
|
125
frontend/js/Archiwum/script.js
Normal file
125
frontend/js/Archiwum/script.js
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
// import Agent from './Agent.js'
|
||||||
|
|
||||||
|
// //Klasy
|
||||||
|
|
||||||
|
|
||||||
|
// class Field {
|
||||||
|
// constructor(x, y, isEmpty) {
|
||||||
|
// this.xField = x;
|
||||||
|
// this.yField = y;
|
||||||
|
// this.isFieldEmpty = isEmpty;
|
||||||
|
// }
|
||||||
|
// getCoordinates(){
|
||||||
|
// return this.xField + this.yField;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// getStatus(){
|
||||||
|
// return this.isFieldEmpty;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// class Product {
|
||||||
|
// constructor(name, type, farcing, price) {
|
||||||
|
// this.name = name;
|
||||||
|
// this.type = type;
|
||||||
|
// this.farcing = farcing;
|
||||||
|
// this.price = price
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// class Rack{
|
||||||
|
// constructor(noOfShelf, typOfProduct) {
|
||||||
|
// this.noOfShelf = noOfShelf;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// addShelf(){
|
||||||
|
// this.noOfShelf = this.noOfShelf + 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// isEmpty(){
|
||||||
|
// if (this.noOfShelf === 0){
|
||||||
|
// return true;
|
||||||
|
// }else {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// class Shelf {
|
||||||
|
// constructor(number) {
|
||||||
|
// this.number = number;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// //Objekty i zmienne
|
||||||
|
// var regaly = ['1-1', '1-3', '1-4', '1-6', '1-7', '1-9', '2-1', '2-9', '3-3', '3-4', '3-6', '3-7', '4-1', '4-9', '5-1', '5-3', '5-4', '5-6', '5-7', '5-9']
|
||||||
|
// const agent1 = new Agent(3, 0);
|
||||||
|
|
||||||
|
// //Funkcja uruchamiająca prace calego scriptu
|
||||||
|
// function start(){
|
||||||
|
// //ponumerujPola();
|
||||||
|
// pokolorujRegaly();
|
||||||
|
// umiescAgenta(agent1);
|
||||||
|
// droga(agent1);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Funkcja kolorujaca miejsca na planszy gdzie znajduja sie regaly
|
||||||
|
// function pokolorujRegaly(){
|
||||||
|
// let x;
|
||||||
|
// for(x = 0; x < regaly.length; x++){
|
||||||
|
// document.getElementById(regaly[x]).className = 'regal';
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Funkcja wyswietlajaca id pol
|
||||||
|
// function ponumerujPola(){
|
||||||
|
// let x,y
|
||||||
|
// for(x = 0; x < 7; x++){
|
||||||
|
// for(y = 0; y < 11; y++){
|
||||||
|
// id = x.toString() + "-" + y.toString();
|
||||||
|
// document.getElementById(id).innerHTML = id;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Funkcja usuwająca agenta z pola, przed przemieszczeniem
|
||||||
|
// function usunAgenta(agent){
|
||||||
|
// document.getElementById(agent.getId()).style.backgroundImage = "none";
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// //Funckja wyswietlajaca agenta gdy ten zmieni polozenie
|
||||||
|
// function umiescAgenta(agent) {
|
||||||
|
// document.getElementById(agent.getId()).style.backgroundImage = "url('Agent.jpg')";
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Funkcja zmieniajaca polozenie agenta o 1 pole
|
||||||
|
// function przemieszczenie(side, time, agent){
|
||||||
|
// const lastPosition = agent.getId();
|
||||||
|
// setTimeout(function(){
|
||||||
|
// usunAgenta(agent)
|
||||||
|
// if(side == "left")
|
||||||
|
// agent.left();
|
||||||
|
// if(side == "right")
|
||||||
|
// agent.right();
|
||||||
|
// if(side == "up")
|
||||||
|
// agent.up();
|
||||||
|
// if(side == "down")
|
||||||
|
// agent.down();
|
||||||
|
// umiescAgenta(agent);
|
||||||
|
// }, time);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //Funkcja ktora ustala droge agenta do przebycia
|
||||||
|
// function droga(agent) {
|
||||||
|
// przemieszczenie("right", 1000, agent);
|
||||||
|
// przemieszczenie("right", 2000, agent);
|
||||||
|
// przemieszczenie("up", 3000, agent);
|
||||||
|
// przemieszczenie("right", 4000, agent);
|
||||||
|
// przemieszczenie("right", 5000, agent);
|
||||||
|
// przemieszczenie("right", 6000, agent);
|
||||||
|
// przemieszczenie("right", 7000, agent);
|
||||||
|
// przemieszczenie("right", 8000, agent);
|
||||||
|
// przemieszczenie("right", 9000, agent);
|
||||||
|
// }
|
@ -1,27 +1,147 @@
|
|||||||
import * as Board from './Board.js'
|
//Klasy
|
||||||
import Agent from './Agent.js'
|
class Agent{
|
||||||
|
constructor(positionX, positionY, turn){
|
||||||
|
this.positionX = positionX;
|
||||||
|
this.positionY = positionY;
|
||||||
|
this.turn = turn;
|
||||||
|
}
|
||||||
|
|
||||||
let board = Board.createBoard(10,10);
|
getParams(){
|
||||||
Board.showBoard(board);
|
let params = {};
|
||||||
|
|
||||||
|
positionX = this.positionX;
|
||||||
|
positionY = this.positionY;
|
||||||
|
turn = this.turn;
|
||||||
|
|
||||||
|
params = {positionX, positionY, turn};
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
goForward(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.positionY += 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.positionY -= 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.positionX -= 1;
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.positionX += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
turnLeft(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.turn = 'Left';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.turn = 'Right';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.turn = 'Down';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.turn = 'Up'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
turnRight(){
|
||||||
|
if(this.turn == 'Up'){
|
||||||
|
this.turn = 'Right';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Down'){
|
||||||
|
this.turn = 'Left';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Left'){
|
||||||
|
this.turn = 'Up';
|
||||||
|
}
|
||||||
|
else if(this.turn == 'Right'){
|
||||||
|
this.turn = 'Down'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
showAgent(){
|
||||||
|
console.log(this.turn)
|
||||||
|
if(this.turn === "Up"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Up.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Down"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Down.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Right"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Right.png')";
|
||||||
|
}
|
||||||
|
else if(this.turn === "Left"){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "url('img/Left.png')";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
hideAgent(){
|
||||||
|
document.getElementById(this.positionX + "-" + this.positionY).style.backgroundImage = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Field{
|
||||||
|
constructor(x, y, isShelf, isOccupiedByAgent, costOfTravel){
|
||||||
|
this.xField = x;
|
||||||
|
this.yField = y;
|
||||||
|
this.isShelf = isShelf;
|
||||||
|
this.isOccupiedByAgent = isOccupiedByAgent;
|
||||||
|
this.costOfTravel = costOfTravel;
|
||||||
|
}
|
||||||
|
|
||||||
|
getParams(){
|
||||||
|
let params = {};
|
||||||
|
|
||||||
|
xField = this.xField;
|
||||||
|
yField = this.yField;
|
||||||
|
isShelf = this.isShelf;
|
||||||
|
isOccupiedByAgent = this.isOccupiedByAgent;
|
||||||
|
costOfTravel = this.costOfTravel;
|
||||||
|
params = {xField, yField, isShelf, isOccupiedByAgent, costOfTravel}
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//funckcje
|
||||||
|
|
||||||
|
function createBoard(rangeX, rangeY){
|
||||||
|
const board = [];
|
||||||
|
|
||||||
|
for(let y = 0; y < rangeY; y++){
|
||||||
|
const row = [];
|
||||||
|
for(let x = 0; x < rangeX; x++){
|
||||||
|
let field = new Field(x, y, false, false, 1);
|
||||||
|
row.push(field)
|
||||||
|
}
|
||||||
|
board.push(row)
|
||||||
|
}
|
||||||
|
return board
|
||||||
|
}
|
||||||
|
|
||||||
|
function showBoard(board){
|
||||||
|
for(let y = board.length - 1; y >= 0 ; y--){
|
||||||
|
document.getElementById("board").innerHTML += "<div class='row' id='row-" + y + "'> </div>";
|
||||||
|
|
||||||
|
for(let x = 0; x < board[y].length; x++){
|
||||||
|
document.getElementById("row-" + y).innerHTML += "<div class='field' id=" + x + "-" + y + "> </div>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let board = createBoard(10,10);
|
||||||
let agent = new Agent(0,0, 'Right');
|
let agent = new Agent(0,0, 'Right');
|
||||||
|
|
||||||
agent.showAgent();
|
function start(){
|
||||||
|
showBoard(board);
|
||||||
|
agent.showAgent();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user