package evg.algorithm;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Population {
private Map<List<Integer>, Double> nests = new HashMap<List<Integer>,Double>();
private List<Integer> template;
private Set<List<Integer>> cacheNests;
private Task task;
private int numOfNests;
private float E;
//构造函数
public Population(Task task, int numOfVariables, int numOfNests, float E) {
this.task = task;
this.template = new ArrayList<Integer>(numOfVariables);
for (int i = 0; i < numOfVariables; i++) {
this.template.add(i);
}
this.numOfNests = numOfNests;
this.E = E;
cacheNests = new HashSet<List<Integer>>();
}
public Map<List<Integer>, Double> getNests() {
return nests;
}
//return best Nest in population
public Map.Entry<List<Integer>, Double> generate() {
int numNests = numOfNests - nests.size();//有疑问???
return generateSequence(numNests);
}
private Map.Entry<List<Integer>, Double> generateSequence(int n) {
Double target;
Map.Entry<List<Integer>, Double> best = getBestNest();
List<Integer> bestNest = best.getKey();
Double min = best.getValue();
for (int i = 0; i < n; i++) {
List<Integer> nest = new ArrayList<Integer>(template);
do {
Collections.shuffle(nest);
} while (!cacheNests.add(nest));
target = task.targetFunction(nest);
nests.put(nest, target);
if (min == null || target < min) {
min = target;
bestNest = nest;
}
}
return new AbstractMap.SimpleEntry<List<Integer>,Double>(bestNest, min);
}
public Map.Entry<List<Integer>, Double> getBestNest() {
List<Integer> bestNest = null;
Double min = null;
for (Map.Entry<List<Integer>, Double> entry : nests.entrySet()) {
List<Integer> nest = entry.getKey();
Double target = task.targetFunction(nest);//有疑问
if (min == null || target < min) {
min = target;
bestNest = nest;
}
}
return new AbstractMap.SimpleEntry<List<Integer>,Double>(bestNest, min);
}
public void naturalSelection() {
arrangeNests();
removeWorstNests();
}
public Map<List<Integer>, Double> arrangeNests() {
List<Map.Entry<List<Integer>, Double>> sortedList = new ArrayList<Map.Entry<List<Integer>,Double>>(nests.entrySet());
Collections.sort(sortedList,new Comparator<Map.Entry<List<Integer>, Double>>() {
@Override
public int compare(Map.Entry<List<Integer>, Double> entry1, Map.Entry<List<Integer>, Double> entry2) {
return entry1.getValue().compareTo(entry2.getValue());
}
});
nests = new HashMap<List<Integer>,Double>();
for (int i = 0; i < sortedList.size(); i++) {
Map.Entry<List<Integer>, Double> entry = sortedList.get(i);
nests.put(entry.getKey(), entry.getValue());
}
return nests;
}
public void removeWorstNests() {
int count = Math.round(nests.size() * E);
List<List<Integer>> removedNests = new ArrayList<List<Integer>>();
int i = 0;
for (Map.Entry<List<Integer>, Double> entry : nests.entrySet()) {
if (nests.size() - count < i) {
removedNests.add(entry.getKey());
i++;
}
for (List<Integer> removedNest : removedNests) {
nests.remove(removedNest);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
布谷鸟算法Java实现源码
共29个文件
class:11个
java:10个
ds_store:3个
需积分: 49 45 下载量 94 浏览量
2018-03-10
11:00:33
上传
评论 3
收藏 42KB ZIP 举报
温馨提示
附件中是布谷鸟算法的Java版本的代码实现,可以正常运行;下载者可以根据自己的应用场景来修改。
资源推荐
资源详情
资源评论
收起资源包目录
布谷鸟算法Java实现.zip (29个子文件)
CuckooSearch
bin
salesman
Salesman20.xlsx 10KB
.DS_Store 6KB
evg
exceptions
BadParametersException.class 384B
program
SalesmanMain.class 3KB
utils
Reader.class 2KB
Checker.class 2KB
algorithm
Cuckoo.class 3KB
CuckooSearch.class 3KB
Population.class 5KB
SalesmanTask.class 1KB
TaskName.class 1023B
Population$1.class 1KB
Task.class 585B
resources
salesman
Salesman20.xlsx 10KB
.DS_Store 6KB
.DS_Store 6KB
.settings
org.eclipse.jdt.core.prefs 587B
src
evg
exceptions
BadParametersException.java 155B
program
SalesmanMain.java 1KB
utils
Checker.java 1KB
Reader.java 1KB
algorithm
Task.java 277B
TaskName.java 111B
CuckooSearch.java 1KB
Population.java 3KB
Cuckoo.java 2KB
SalesmanTask.java 388B
.project 371B
.classpath 824B
共 29 条
- 1
资源评论
xl_lhc_520
- 粉丝: 5
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功