import java.util.Random;
import java.util.Arrays;
import java.util.Comparator;
class MyComparator implements Comparator
{
public int compare(Object o1, Object o2)
{
Number n1 = (Number) o1;
Number n2 = (Number) o2;
if(n1.jump > n2.jump)
{
return 1;
}
else if(n1.jump < n2.jump)
{
return -1;
}
else
{
return 0;
}
}
}
class Number
{
public double i;
public int pos;
public double jump = 0;
public Random r = new Random();
public Number(int pos)
{
this.pos = pos;
i = r.nextInt();
}
}
public class Temp
{
public static void main(String[] args)
{
Number[] n = new Number[50];
double total = 0;
for(int i=0; i<50; i++)
{
n[i] = new Number(i);
total += n[i].i;
}
for(int i=0; i<50; i++)
{
n[i].jump = n[i].i/total;
}
Arrays.sort(n, new MyComparator());
for(int i=0; i<50; i++)
{
System.out.print(n[i].pos + ", ");
}
System.out.println();
for(int i=0; i<50; i++)
{
n[i].jump = n[i].i/total;
n[i].jump = 1-n[i].jump;
}
Arrays.sort(n, new MyComparator());
for(int i=0; i<50; i++)
{
System.out.print(n[i].pos + ", ");
}
System.out.println();
}
}
Trong ví dụ trên, nói Số lớp là lớp cá nhân của bạn, i đang tập thể dục, nhảy là xác suất được chọn làm cha mẹ. Lúc đầu, chúng tôi tính toán xác suất được chọn làm cha mẹ như trước đây. Tại bước này, tập thể dục cao hơn sẽ có xác suất cao hơn. Sau đó, chúng tôi trừ xác suất từ 1. Điều này mang lại cho thể dục thấp hơn thể dục cá nhân cao hơn (tập thể dục giả cho vì lợi ích của lựa chọn). Bây giờ tính toán lại xác suất. Thấy không, trật tự của sự hoàn toàn bị đảo ngược.
Đối với vấn đề thực tế trong cuộc sống, rất khó để biết MAX_FITNESS giống như MIN_FITNESS. – user
Tôi không nên sử dụng mũ chỉ báo không đổi. maxFitness cho bánh xe roulette của bạn là tập thể dục tối đa của thế hệ hiện tại, vì kích thước của bánh xe roulette/xổ số là tổng của các thế hệ hiện tại. –