亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? catandmouseworld.java

?? 用java寫的一個強化學習程序
?? JAVA
字號:
import java.awt.*;

public class CatAndMouseWorld implements RLWorld{
	public int bx, by;

	public int mx, my;
	public int cx, cy;
	public int chx, chy;
	public int hx, hy;
	public boolean gotCheese = false;
	
	public int catscore = 0, mousescore = 0;
	public int cheeseReward=50, deathPenalty=100;
	
	static final int NUM_OBJECTS=6, NUM_ACTIONS=8, WALL_TRIALS=100;
	static final double INIT_VALS=0;
		
	int[] stateArray;
	double waitingReward;
	public boolean[][] walls;

	public CatAndMouseWorld(int x, int y, int numWalls) {
		bx = x;
		by = y;
		makeWalls(x,y,numWalls);
		
		resetState();
	}
	
	public CatAndMouseWorld(int x, int y, boolean[][] newwalls) {
		bx = x;
		by = y;
		
		walls = newwalls;
		
		resetState();
	}

	/******* RLWorld interface functions ***********/
	public int[] getDimension() { 
		int[] retDim = new int[NUM_OBJECTS+1];
		int i;
		for (i=0; i<NUM_OBJECTS;) {
			retDim[i++] = bx;
			retDim[i++] = by;
		}
		retDim[i] = NUM_ACTIONS;
		
		return retDim;
	}
		
	// given action determine next state
	public int[] getNextState(int action) {
		// action is mouse action:  0=u 1=ur 2=r 3=dr ... 7=ul
		Dimension d = getCoords(action);
		int ax=d.width, ay=d.height;
		if (legal(ax,ay)) {
			// move agent
			mx = ax; my = ay;
		} else {
			//System.err.println("Illegal action: "+action);
		}
		// update world
		moveCat();
		waitingReward = calcReward();
		
		// if mouse has cheese, relocate cheese
		if ((mx==chx) && (my==chy)) {
			d = getRandomPos();
			chx = d.width;
			chy = d.height;
		}
		
		/*// if cat has mouse, relocate mouse
		if ((mx==cx) && (my==cy)) {
			d = getRandomPos();
			mx = d.width;
			my = d.height;
		}*/

		return getState();
	}
	
	public double getReward(int i) { return getReward(); }
	public double getReward() {	return waitingReward; }
	
	public boolean validAction(int action) {
		Dimension d = getCoords(action);
		return legal(d.width, d.height);
	}
	
	Dimension getCoords(int action) {
		int ax=mx, ay=my;
		switch(action) {
			case 0: ay = my - 1; break;
			case 1: ay = my - 1; ax = mx + 1; break;
			case 2: ax = mx + 1; break;
			case 3: ay = my + 1; ax = mx + 1; break;
			case 4: ay = my + 1; break;
			case 5: ay = my + 1; ax = mx - 1; break;
			case 6: ax = mx - 1; break;
			case 7: ay = my - 1; ax = mx - 1; break;
			default: //System.err.println("Invalid action: "+action);
		}
		return new Dimension(ax, ay);
	}

	// find action value given x,y=0,+-1
	int getAction(int x, int y) {
		int[][] vals={{7,0,1},
		              {6,0,2},
					  {5,4,3}};
		if ((x<-1) || (x>1) || (y<-1) || (y>1) || ((y==0)&&(x==0))) return -1;
		int retVal = vals[y+1][x+1];
		return retVal;
	}

	public boolean endState() { return endGame(); }
	public int[] resetState() { 
		catscore = 0;
		mousescore = 0;
		setRandomPos(); 
		return getState();
	}
		
	public double getInitValues() { return INIT_VALS; }
	/******* end RLWorld functions **********/
	
	public int[] getState() {
		// translates current state into int array
		stateArray = new int[NUM_OBJECTS];
		stateArray[0] = mx;
		stateArray[1] = my;
		stateArray[2] = cx;
		stateArray[3] = cy;
		stateArray[4] = chx;
		stateArray[5] = chy;
		return stateArray;
	}

	public double calcReward() {
		double newReward = 0;
		if ((mx==chx)&&(my==chy)) {
			mousescore++;
			newReward += cheeseReward;
		}
		if ((cx==mx) && (cy==my)) {
			catscore++;
			newReward -= deathPenalty;
		}
		//if ((mx==hx)&&(my==hy)&&(gotCheese)) newReward += 100;
		return newReward;		
	}
	
	public void setRandomPos() {
		Dimension d = getRandomPos();
		cx = d.width;
		cy = d.height;
		d = getRandomPos();
		mx = d.width;
		my = d.height;
		d = getRandomPos();
		chx = d.width;
		chy = d.height;
		d = getRandomPos();
		hx = d.width;
		hy = d.height;
	}

	boolean legal(int x, int y) {
		return ((x>=0) && (x<bx) && (y>=0) && (y<by)) && (!walls[x][y]);
	}

	boolean endGame() {
		//return (((mx==hx)&&(my==hy)&& gotCheese) || ((cx==mx) && (cy==my)));
		return ((cx==mx) && (cy==my));
	}

	Dimension getRandomPos() {
		int nx, ny;
		nx = (int)(Math.random() * bx);
		ny = (int)(Math.random() * by);
		for(int trials=0; (!legal(nx,ny)) && (trials < WALL_TRIALS); trials++){
			nx = (int)(Math.random() * bx);
			ny = (int)(Math.random() * by);
		}
		return new Dimension(nx, ny);
	}
	
	/******** heuristic functions ***********/
	Dimension getNewPos(int x, int y, int tx, int ty) {
		int ax=x, ay=y;
		
		if (tx==x) ax = x;
 		else ax += (tx - x)/Math.abs(tx-x); // +/- 1 or 0
		if (ty==y) ay = y;
 		else ay += (ty - y)/Math.abs(ty-y); // +/- 1 or 0
		
		// check if move legal	
		if (legal(ax, ay)) return new Dimension(ax, ay);
		
		// not legal, make random move
		while(true) {
			// will definitely exit if 0,0
			ax=x; ay=y;
			ax += 1-(int) (Math.random()*3);
			ay += 1-(int) (Math.random()*3);
			
			//System.out.println("old:"+x+","+y+" try:"+ax+","+ay);
			if (legal(ax,ay)) return new Dimension(ax,ay);
		}
	}

	void moveCat() {
		Dimension newPos = getNewPos(cx, cy, mx, my);
		cx = newPos.width;
		cy = newPos.height;		
	}

	void moveMouse() {
		Dimension newPos = getNewPos(mx, my, chx, chy);
		mx = newPos.width;
		my = newPos.height;
	}
	
	int mouseAction() {
		Dimension newPos = getNewPos(mx, my, chx, chy);
		return getAction(newPos.width-mx,newPos.height-my);
	}
	/******** end heuristic functions ***********/


	/******** wall generating functions **********/
	void makeWalls(int xdim, int ydim, int numWalls) {
		walls = new boolean[xdim][ydim];
		
		// loop until a valid wall set is found
		for(int t=0; t<WALL_TRIALS; t++) {
			// clear walls
			for (int i=0; i<walls.length; i++) {
				for (int j=0; j<walls[0].length; j++) walls[i][j] = false;
			}
			
			float xmid = xdim/(float)2;
			float ymid = ydim/(float)2;
			
			// randomly assign walls.  
			for (int i=0; i<numWalls; i++) {
				Dimension d = getRandomPos();
				
				// encourage walls to be in center
				double dx2 = Math.pow(xmid - d.width,2);
				double dy2 = Math.pow(ymid - d.height,2);
				double dropperc = Math.sqrt((dx2+dy2) / (xmid*xmid + ymid*ymid));
				if (Math.random() < dropperc) {
					// reject this wall
					i--;
					continue;
				}
				
				
				walls[d.width][d.height] = true;
			}
			
			// check no trapped points
			if (validWallSet(walls)) break;
			
		}
		
	}
	
	boolean validWallSet(boolean[][] w) {
		// copy array
		boolean[][] c;
		c = new boolean[w.length][w[0].length];
		
		for (int i=0; i<w.length; i++) {
			for (int j=0; j<w[0].length; j++) c[i][j] = w[i][j];
		}
		
		// fill all 8-connected neighbours of the first empty
		// square.
		boolean found = false;
		search: for (int i=0; i<c.length; i++) {
			for (int j=0; j<c[0].length; j++) {
				if (!c[i][j]) {
					// found empty square, fill neighbours
					fillNeighbours(c, i, j);
					found = true;
					break search;
				}
			}
		}
		
		if (!found) return false;
		
		// check if any empty squares remain
		for (int i=0; i<c.length; i++) {
			for (int j=0; j<c[0].length; j++) if (!c[i][j]) return false;
		}
		return true;
	}
	
	void fillNeighbours(boolean[][] c, int x, int y) {
		c[x][y] = true;
		for (int i=x-1; i<=x+1; i++) {
			for (int j=y-1; j<=y+1; j++)
				if ((i>=0) && (i<c.length) && (j>=0) && (j<c[0].length) && (!c[i][j])) 
					fillNeighbours(c,i,j);
		}
	}
	/******** wall generating functions **********/

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久综合九色合综国产精品| 三级在线观看一区二区| 亚洲aaa精品| 99在线视频精品| 欧美草草影院在线视频| 一区二区三区成人在线视频| 国模冰冰炮一区二区| 9191成人精品久久| 中文字幕一区日韩精品欧美| 国产美女在线观看一区| 7777精品伊人久久久大香线蕉完整版| 国产精品久久久久桃色tv| 九九热在线视频观看这里只有精品| 91黄色免费看| 中文字幕字幕中文在线中不卡视频| 久久99久久99精品免视看婷婷| 欧美人xxxx| 亚洲午夜电影在线| 色婷婷亚洲精品| 亚洲男帅同性gay1069| 成人a区在线观看| 国产精品三级久久久久三级| 国产一区二区福利视频| 精品欧美一区二区在线观看| 蜜桃视频一区二区三区| 6080午夜不卡| 免费在线看成人av| 日韩美女视频在线| 久久国产精品无码网站| 日韩精品一区二区三区在线| 久久电影国产免费久久电影| 3d动漫精品啪啪1区2区免费| 蜜臀va亚洲va欧美va天堂| 欧美一级高清片| 六月婷婷色综合| 国产亚洲欧美一级| 成人激情av网| 亚洲精品免费看| 欧美日韩精品一区二区三区四区| 亚洲电影一级黄| 日韩精品中文字幕一区二区三区| 日本麻豆一区二区三区视频| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲视频每日更新| 99久久婷婷国产综合精品| 亚洲欧美一区二区不卡| 日本乱码高清不卡字幕| 亚洲一区二区影院| 91精品国产手机| 国产一区二区女| 中文字幕在线一区| 欧美午夜一区二区三区免费大片| 天堂久久久久va久久久久| 日韩女同互慰一区二区| 成人aa视频在线观看| 一区二区三区 在线观看视频 | 国产伦精一区二区三区| 国产精品久久久一区麻豆最新章节| 91浏览器打开| 日韩精品91亚洲二区在线观看| wwwwxxxxx欧美| 欧美自拍偷拍一区| 麻豆精品视频在线观看| 中文字幕乱码久久午夜不卡 | 亚洲高清免费一级二级三级| 亚洲精品在线电影| 色综合久久久久综合体| 蜜桃视频一区二区| 中文字幕中文字幕一区二区| 91精品国产综合久久精品 | 久久久99精品免费观看不卡| 在线观看一区二区精品视频| 国产在线视频一区二区| 亚洲精品v日韩精品| 久久伊人中文字幕| 欧美午夜电影在线播放| 国产成人av福利| av亚洲精华国产精华| 日韩成人av影视| 亚洲欧美色综合| 久久这里只有精品视频网| 在线观看精品一区| 成人午夜又粗又硬又大| 美女网站视频久久| 亚洲一区视频在线观看视频| 国产精品色哟哟| 精品国产91久久久久久久妲己 | 日韩亚洲欧美在线| 日本韩国一区二区三区视频| 国产99久久久久久免费看农村| 日本怡春院一区二区| 一区二区免费看| 亚洲日韩欧美一区二区在线| 久久亚洲精华国产精华液| 欧美一级高清大全免费观看| 欧美色电影在线| 91久久免费观看| 99久久精品99国产精品 | 麻豆精品国产传媒mv男同| 一区二区三区国产| 国产精品国产三级国产普通话蜜臀 | 久久综合精品国产一区二区三区| 欧美色综合影院| 色先锋aa成人| 99re8在线精品视频免费播放| 国产久卡久卡久卡久卡视频精品| 91看片淫黄大片一级在线观看| 国产精品123| 国产精品一区二区三区四区| 免费成人小视频| 蜜臀久久99精品久久久久宅男 | 欧美一三区三区四区免费在线看 | 久久蜜桃av一区精品变态类天堂| 欧美成人精品福利| 精品剧情v国产在线观看在线| 欧美一级理论性理论a| 69久久99精品久久久久婷婷| 欧美精品一级二级| 91精品久久久久久久99蜜桃| 欧美一级艳片视频免费观看| 日韩一区二区三区免费观看| 日韩欧美视频在线 | 日韩精品资源二区在线| 精品美女一区二区三区| 久久综合久色欧美综合狠狠| 国产三级一区二区| 亚洲天堂2014| 亚洲蜜臀av乱码久久精品| 亚洲免费观看高清完整版在线 | 国产成人久久精品77777最新版本| 国产精品1区2区| jizzjizzjizz欧美| 欧美中文字幕一二三区视频| 日韩一区二区中文字幕| 国产欧美一区二区精品性| 亚洲少妇中出一区| 图片区小说区国产精品视频| 国产精品一区不卡| 99久久综合色| 91麻豆精品91久久久久久清纯 | 国产99久久久国产精品免费看 | 欧美xxxx在线观看| 日本一区二区三区电影| 一区二区理论电影在线观看| 久久超碰97人人做人人爱| 岛国精品在线观看| 欧美日韩综合色| 久久久91精品国产一区二区精品| 中文字幕一区二区视频| 奇米色777欧美一区二区| 成人一区二区三区中文字幕| 欧美体内she精视频| 久久综合狠狠综合久久激情| 一区二区三区在线播| 美女视频黄频大全不卡视频在线播放 | 久久精品国产77777蜜臀| k8久久久一区二区三区| 欧美一二三四区在线| 亚洲图片激情小说| 国内精品久久久久影院色 | 午夜一区二区三区视频| 国产一区二区久久| 欧美日本一区二区三区四区| 国产欧美日韩在线视频| 日韩综合小视频| 日本一区二区三区dvd视频在线| 亚洲成人1区2区| 91亚洲精华国产精华精华液| 欧美xxxx老人做受| 丝袜亚洲另类欧美| 在线免费观看日本欧美| 国产精品日产欧美久久久久| 免费成人在线观看视频| 91福利视频久久久久| 国产精品情趣视频| 久草中文综合在线| 在线电影一区二区三区| 亚洲精品中文字幕在线观看| 国产成人av影院| 精品国免费一区二区三区| 亚洲成人一区二区| 色老头久久综合| 亚洲蜜臀av乱码久久精品蜜桃| jvid福利写真一区二区三区| 国产性色一区二区| 裸体一区二区三区| 欧美一区二区美女| 石原莉奈在线亚洲二区| 欧美日韩一区二区三区在线| 亚洲欧美激情一区二区| 99re在线视频这里只有精品| 国产精品污网站| 福利电影一区二区三区| 国产欧美精品一区| 国产91丝袜在线播放0| 久久久久高清精品| 国产成人av影院| 国产精品久久久久一区二区三区 | 亚洲精品成a人| 欧美在线视频日韩|