Você está na página 1de 11

FACULDADE ANHANGUERA DE BAURU

Inteligncia Artificial
ATPS

Cincia da Computao
Oitava Serie

Andr Ricardo da Silva


RA 4251855410

Bruno Bueno de Camargo


RA 4215784996

Bruno Alves Quintanilha


RA 4200060435

Felipe Rangel de Oliveira


RA 4211808985

Kleber Felipe da Silva


RA 1186413238

Prof.: Marcelo Cabello Peres

INTELIGNCIA ARTIFICIAL

Bauru, 13 de outubro de 2015

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

Mecanismos de Busca, Heurstica Aceitvel e Algoritmo A*

Mapa

Cidades

o Cidade Azul

o Cidade Laranja
o Cidade Verde
o Cidade Roxa

o Cidade Cinza

Determinando as distncias e os possveis caminhos entre uma cidade A e uma


cidade B

o Cidade A Cidade Azul (estado inicial)

o Cidade B Cidade Cinza (estado final)

Custo do caminho

Melhor rota:

Azul Verde Cinza

Custo total:

471Km

Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

Programa em funcionamento no Navegador Web

Requisitos do programa

Cdigo de programao do programa

o Navegador com suporte a HTML5 e Canvas

var canvas = document.getElementById("canvas");


var ctx = canvas.getContext("2d");

ctx.canvas.width = window.innerWidth / 2;

ctx.canvas.height = window.innerHeight / 2;
var BB = canvas.getBoundingClientRect();
var offsetX = BB.left;
var offsetY = BB.top;

var WIDTH = canvas.width;

var HEIGHT = canvas.height;

var rec0 = document.getElementById("0");


var rec1 = document.getElementById("1");
var rec2 = document.getElementById("2");
var rec3 = document.getElementById("3");
var rec4 = document.getElementById("4");
// Chaves de DragDrop
var dragok = false;
var startX;
var startY;

var tbCurta = document.getElementById("tBcurto");

var tbLongo = document.getElementById("tBlongo");


Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

var total = 0;

var totalI = 0;

var resultados = [];

var resultadosInverso = [];


var rects = [];
var pos = [];
rects.push({

name: "Cinza",
x: 200,

y: 50 - 15,
width: 50,

height: 50,

fill: "#444444",

isDragging: false,
node: "Roxo"

});

rects.push({

name: "Laranja",
x: 50,

y: 200,

width: 50,

height: 50,

fill: "#ff550d",

isDragging: false,
node: "Azul"

});

rects.push({

name: "Roxo",
x: 200,
y: 200,

width: 50,

height: 50,

fill: "#800080",

isDragging: false,
node: "Laranja"

});

rects.push({

name: "Azul",
x: 50,
y: 35,

Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

width: 50,

height: 50,

fill: "#0c64e8",

isDragging: false,
node: "Verde"

});

rects.push({

name: "Verde",
x: 125,
y: 120,

width: 50,

height: 50,

fill: "#00B736",

isDragging: false,
node: "Cinza"

});

//Adicionando Eventos do Mouse

canvas.onmousedown = myDown;
canvas.onmouseup = myUp;

canvas.onmousemove = myMove;
//Desenhando Objetos
draw();

// funo do retangulo, esboo


function rect(x, y, w, h) {
ctx.beginPath();

ctx.rect(x, y, w, h);
ctx.closePath();
}

ctx.fill();

// limpa o canvas apos desenhar um objeto


function clear() {
}

ctx.clearRect(0, 0, WIDTH, HEIGHT);

// redraw the scene


function draw() {
clear();

Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

ctx.fillStyle = "#FAF7F8";

rect(0, 0, WIDTH, HEIGHT);

//Desenha os retangulos do array

for (var i = 0; i < rects.length; i++) {


var r = rects[i];

ctx.fillStyle = r.fill;

rect(r.x, r.y, r.width, r.height);


}

//pos[i] = ctx.save();

rec0.innerText = "x: " + rects[0].x + " y: " + rects[0].y + " " + rects[0].name;
rec1.innerText = "x: " + rects[1].x + " y: " + rects[1].y + " " + rects[1].name;
rec2.innerText = "x: " + rects[2].x + " y: " + rects[2].y + " " + rects[2].name;
rec3.innerText = "x: " + rects[3].x + " y: " + rects[3].y + " " + rects[3].name;
}

rec4.innerText = "x: " + rects[4].x + " y: " + rects[4].y + " " + rects[4].name;

// evento de quando clicar e segurar apertado


function myDown(e) {

// invoca os eventos do browser


e.preventDefault();

e.stopPropagation();
// pega a posicao do mouse

var mx = parseInt(e.clientX - offsetX);


var my = parseInt(e.clientY - offsetY);

dragok = false;

for (var i = 0; i < rects.length; i++) {


var r = rects[i];

if (mx > r.x && mx < r.x + r.width && my > r.y && my < r.y + r.height) {
dragok = true;

r.isDragging = true;

// guarda as posies
startX = mx;
}

startY = my;

Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

function myUp(e) {

// tell the browser we're handling this mouse event


e.preventDefault();

e.stopPropagation();
// clear all the dragging flags
dragok = false;

for (var i = 0; i < rects.length; i++) {

rects[i].isDragging = false;

// handle mouse moves


function myMove(e) {
if (dragok) {

e.preventDefault();

e.stopPropagation();
var mx = parseInt(e.clientX - offsetX);
var my = parseInt(e.clientY - offsetY);
var dx = mx - startX;

var dy = my - startY;
for (var i = 0; i < rects.length; i++) {
var r = rects[i];

if (r.isDragging) {
r.x += dx;

r.y += dy;

draw();
startX = mx;

startY = my;

function CalcularDistancia(xa, xb, ya, yb) {


Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

resultadoX = ((xb - xa) < 0 ? (xb - xa) * (-1) : xb - xa);

resultadoY = ((yb - ya) < 0 ? (yb - ya) * (-1) : yb - ya);

resultadoTotal = Math.pow(resultadoX, 2) + Math.pow(resultadoY, 2);


}

return Math.sqrt(resultadoTotal);

function BuscarRotas(objInicio, objFim) {


//Zerando os arrays
resultados = [];

resultadosInverso = [];
//---------------------

if (objInicio != objFim) {

BuscarRotaInversa(objInicio, objFim);
total = 0;

for (var i = 0; i < rects.length; i++) {


//Procura o Objeto de inicio

if (rects[i].name == objInicio) {

for (var k = 0; k < rects.length; k++) {

if (rects[i].node == rects[k].name) {
resultados.push({

de: rects[i].name,

para: rects[k].name,

distancia: CalcularDistancia(rects[i].x, rects[k].x, rects[i].y, rects[k].y)

});

if (rects[k].name == objFim) {
i = rects.length;
k = i;
}

break;

objInicio = rects[k].name;
i = -1;

break;

for (var t = 0; t < resultados.length; t++) {


}

total += resultados[t].distancia;

popularTabelas();

else {
Cincia da Computao 8 Semestre

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

alert("A origem deve ser diferente do destino");

function BuscarRotaInversa(objI, objF) {


totalI = 0;

for (var i = 0; i < rects.length; i++) {


//Procura o Objeto de inicio
if (rects[i].node == objI) {

for (var k = 0; k < rects.length; k++) {

if (rects[i].node == rects[k].name) {
resultadosInverso.push({
de: rects[k].name,

para: rects[i].name,

distancia: CalcularDistancia(rects[i].x, rects[k].x, rects[i].y, rects[k].y)

});

if (rects[i].name == objF) {
i = rects.length;
k = i;
}

break;

objI = rects[i].name;
i = -1

break;

for (var t = 0; t < resultadosInverso.length; t++) {

totalI += resultadosInverso[t].distancia;

function carregarSelect() {

var select = document.getElementById("combo1");

var select2 = document.getElementById("combo2");


for (var k = 0; k < rects.length; k++) {

select.innerHTML += "<option value='" + rects[k].name + "'>" + rects[k].name +

"</option>";
}

select2.innerHTML = select.innerHTML;

Cincia da Computao 8 Semestre

10

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

function popularTabelas() {

tbCurta.innerHTML = "";

tbLongo.innerHTML = "";
tbCurta.innerHTML

tbLongo.innerHTML

"<thead><tr><th>De</th><th>Para</th><th>Distancia</th></tr></thead>";
"<thead><tr><th>De</th><th>Para</th><th>Distancia</th></tr></thead>";
if (total < totalI) {

for (var i = 0; i < resultados.length; i++) {

tbCurta.innerHTML += "<tr><td>" + resultados[i].de + "</td><td>" + resultados[i].para

+ "</td><td>" + Math.round(resultados[i].distancia) + "</td></tr>";


if (i == resultados.length - 1) {
tbCurta.innerHTML

+=

"<tfoot><tr><td></td><td></td><td><b>"

Math.round(total) + "</b></td></tr></tfoot>";
}

for (var k = 0; k < resultadosInverso.length; k++) {

tbLongo.innerHTML += "<tr><td>" + resultadosInverso[k].de + "</td><td>" +

resultadosInverso[k].para + "</td><td>" + Math.round(resultadosInverso[k].distancia) +


"</td></tr>";

if (k == resultadosInverso.length - 1) {
tbLongo.innerHTML

+=

"<tfoot><tr><td></td><td></td><td><b>"

Math.round(totalI) + "</b></td></tr></tfoot>";

else {

for (var k = 0; k < resultadosInverso.length; k++) {

tbCurta.innerHTML += "<tr><td>" + resultadosInverso[k].de + "</td><td>" +

resultadosInverso[k].para + "</td><td>" + Math.round(resultadosInverso[k].distancia) +


"</td></tr>";

if (k == resultadosInverso.length - 1) {
tbCurta.innerHTML

+=

"<tfoot><tr><td></td><td></td><td><b>"

Math.round(totalI) + "</b></td></tr></tfoot>";
}

for (var i = 0; i < resultados.length; i++) {


tbLongo.innerHTML

+=

"<tr><td>"

resultados[i].de

"</td><td>"

resultados[i].para + "</td><td>" + Math.round(resultados[i].distancia) + "</td></tr>";


if (i == resultados.length - 1) {

Cincia da Computao 8 Semestre

11

ATPS - ATIVIDADES PRTICAS SUPERVISIONADAS

tbLongo.innerHTML

+=

"<tfoot><tr><td></td><td></td><td><b>"

Math.round(total) + "</b></td></tr></tfoot>";

function LigarPontos() {
var FPS = 50;

setInterval(function () {

for (var i = 0; i < rects.length; i++) {

for (var j = 0; j < rects.length; j++) {

if (rects[i].node == rects[j].name) {
ctx.beginPath();

ctx.lineWidth = 5;

ctx.moveTo((rects[i].x) + rects[i].width / 2, (rects[i].y) + rects[0].height / 2);


ctx.lineTo((rects[j].x) + rects[j].width / 2, (rects[j].y) + rects[j].height / 2);
ctx.closePath();
ctx.stroke();

break;

}, 1000 / FPS);

carregarSelect();
LigarPontos();

Cincia da Computao 8 Semestre

Você também pode gostar