ranmachine.java

来自「java实现的遗传算法RPS」· Java 代码 · 共 67 行

JAVA
67
字号
package net.leonmax.rpsGame.gaEngine;

import java.util.Random;

public class RanMachine {
	private double[] group;
	
    private boolean[] candidate;
    private int left;

	public void setGroup(double[] g) {
		group = g;
	}

	public int[] roulette(int num) {
		int[] ret = new int[num];
		Random ran = new Random();
		for (int i = 0; i < num; i++) {
			double ranNum = ran.nextDouble();
			//System.out.println(ranNum);
			double temp = 0;
			for (int j = 0; j < group.length; j++) {
				if (ranNum > temp && ranNum <= group[j] + temp) {
					ret[i] = j;
					break;
				}
				temp += group[j];
			}
		}
		return ret;
	}

	public int ranRPS() {
		setGroup(new double[] { 1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0 });
		return roulette(1)[0];
	}
	
	// exclude one of the RPS move, and randomized from the rest two
    public int ranRPS(int exc)
    {
        resetCandidate(3);
        candidate[exc] = true;
        return elect();
    }
	
    public void resetCandidate(int num)
    {
        candidate = new boolean[num];
        left = num;
    }

    public int elect()
    {
        Random r = new Random();
        int chosenOne = r.nextInt(left);
        int count = 0;              // none chosen ones visit count
        int k = -1;                 // visit count
        do
        {
            if (!candidate[++k]) count++;
        } while (count < chosenOne + 1 && k < candidate.length - 1);
        candidate[k] = true;
        left--;
        return k;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?