- 浏览: 33257 次
- 性别:
- 来自: 深圳
最新评论
-
jss:
...
eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常 -
zhangice1789:
我感觉楼主这个很无聊。
eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常 -
skzr.org:
还可以啦07年曾经调试生产环境时碰到一样的问题!!!
eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常 -
webeasymail:
蛋疼。。。。。。。。。
eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常 -
老糊涂:
很蛋疼的总结
eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常
说明:算法来自于《集体智慧编程》-第五章
原书代码用 Python 实现,这两天看这章书,改用 Java 实现。
问题描述:Glass 一家六人在全国各地c,要到 LGA 碰头聚会。求花费最少的解法。
和原书代码意思不同的:计算增加了旅途中时间,0.5/h
/** * * FILENAME: Optimization.java * AUTHOR: vivizhyy[at]gmail.com * STUID: whu * DATE: 2010-4-12 * USAGE : */ package ch5.optimization; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Random; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.joda.time.DateTime; import org.joda.time.LocalTime; public class Optimization { private HashMap<String, String> people = new HashMap<String, String>(); private static String[] family = {"Seymour", "Pranny", "Zooey", "Wait", "Buddy", "Les"}; private String destination = "LGA"; private Flights flights = new Flights(); private static final int MEMBER_NUM = 6; private Logger log = Logger.getLogger(Optimization.class.getName()); private void initPeople() { this.people.put("Seymour", "BOS"); this.people.put("Pranny", "DAL"); this.people.put("Zooey", "CAK"); this.people.put("Wait", "MIA"); this.people.put("Buddy", "ORD"); this.people.put("Les", "OMA"); } /** * * @param times */ public void printSchedule(int[] times) { StringBuilder scheduleResult = new StringBuilder(); int index = 0; for (String mem : family) { scheduleResult.append(mem + "\t" + people.get(mem) + "\t"); Flights f = flights.getFlightByOriginAndDest(people.get(mem), destination)[times[index * 2]]; scheduleResult.append(f.getDepart() + "-" + f.getArraive() + "\t$" + f.getPrice() + "\t"); f = flights.getFlightByOriginAndDest(destination, people.get(mem))[times[index * 2 + 1]]; scheduleResult.append(f.getDepart() + "-" + f.getArraive() + "\t$" + f.getPrice() + "\n"); index++; } System.out.println(scheduleResult); } /** * * @param t * @return */ public int getMinutes(LocalTime t) { return (t.getMinuteOfHour() + t.getHourOfDay() * 60); } /** * * @param sol * @return */ public double scheduleCost(int[] sol) { PropertyConfigurator.configure("D:/Documents/NetBeansProjects/CollectiveProgramming/src/log4j.properties"); double totalPrice = 0.0; int lastArrival = 0; int earliestDep = 24 * 60; int totalTravel = 0; Flights[] outBound = new Flights[MEMBER_NUM * 2]; Flights[] returnFlight = new Flights[MEMBER_NUM * 2]; for (int i = 0; i < MEMBER_NUM; i++) { //得到往返航班 outBound[i] = flights.getFlightByOriginAndDest(people.get(family[i]), destination)[sol[i * 2]]; returnFlight[i] = flights.getFlightByOriginAndDest(destination, people.get(family[i]))[sol[i * 2 + 1]]; //log.info("price:" + outBound[i].getPrice() + "\t" + returnFlight[i].getPrice()); //加航班价格 totalPrice += outBound[i].getPrice(); totalPrice += returnFlight[i].getPrice(); //加旅行时间 totalTravel += getMinutes(outBound[i].getArraive()) - getMinutes(outBound[i].getDepart()); totalTravel += getMinutes(returnFlight[i].getArraive()) - getMinutes(returnFlight[i].getDepart()); //记录最晚到达时间和最早离开时间 if (lastArrival < getMinutes(outBound[i].getArraive())) { lastArrival = getMinutes(outBound[i].getArraive()); } if (earliestDep > getMinutes(returnFlight[i].getDepart())) { earliestDep = getMinutes(returnFlight[i].getDepart()); } } int totalWait = 0; for (int i = 0; i < MEMBER_NUM; i++) { totalWait += lastArrival - getMinutes(outBound[i].getArraive()); totalWait += getMinutes(returnFlight[i].getDepart()) - earliestDep; } //要多付一天的汽车租用金吗? if (lastArrival > earliestDep) { totalPrice += 50; } totalPrice = totalPrice + totalWait + totalTravel * 0.5; return totalPrice; } /** * 随机在 <code>loopTimes</code> 次中找出最值 * @param loopTimes * @return */ public int[] randomOptimize(int loopTimes) { int[] bestr = new int[MEMBER_NUM * 2]; double best = 999999999; for (int i = 0; i < loopTimes; i++) { int[] r = randomResult(); double price = scheduleCost(r); if (best > price) { best = price; bestr = r; } } System.out.println("total cost: " + best); return bestr; } /** * 爬山法 * * @return */ public int[] hillclimb() { int[] sol = randomResult(); double best = 999999999; int count = 0; while (true) { count++; int[][] neighbors = new int[MEMBER_NUM * 2][MEMBER_NUM * 2]; for (int j = 0; j < MEMBER_NUM * 2; j = j + 2) { if (sol[j] > 0) { for (int m = 0; m < MEMBER_NUM * 2; m++) { if (m == j && sol[j] <= 9) { neighbors[j][m] = sol[m] + 1; } else { neighbors[j][m] = sol[m]; } } } if (sol[j] <= 9) { for (int m = 0; m < MEMBER_NUM * 2; m++) { if (m == j && sol[j] != 0) { neighbors[j + 1][j] = sol[m] - 1; } else { neighbors[j + 1][m] = sol[m]; } } } } double currentCost = scheduleCost(sol); for (int m = 0; m < MEMBER_NUM; m++) { double cost = scheduleCost(neighbors[m]); //System.out.println("cost: " + cost); if (cost < best) { best = cost; sol = neighbors[m]; } } if (best == currentCost) { System.out.println("best: " + best); System.out.println("loop: " + count); return sol; } } } /** * 退火算法 * * @param T * @param cool * @param step * @return */ public int[] annealingoptimize(double T, double cool, int step) { int[] vec = randomResult(); long seed = System.nanoTime(); Random random = new Random(seed); while (T > 0.1) { int index = random.nextInt(MEMBER_NUM * 2 - 1); int dir = (int) (random.nextInt(step) * Math.pow(-1, random.nextInt())); // System.out.println("dir: " + dir); int[] vecb = new int[MEMBER_NUM * 2]; for (int i = 0; i < MEMBER_NUM * 2; i++) { if (i == index) { if (vec[i] + dir < 0) { vecb[i] = 0; continue; } if (vecb[i] > 9) { vecb[i] = 9; continue; } vecb[i] = vec[i] + dir; } else { vecb[i] = vec[i]; } } double ea = scheduleCost(vec); double eb = scheduleCost(vecb); if (eb < ea || random.nextDouble() < Math.pow(Math.E, -(eb - ea) / T)) { vec = vecb; } T *= cool; } System.out.println(scheduleCost(vec)); return vec; } public int[] geneticoptimize(int popSize, int step, double mutprob, double elite, int maxiter) { long seed = System.nanoTime(); Random random = new Random(seed); //构造初始种群 ArrayList<int[]> pop = new ArrayList<int[]>(popSize); for (int i = 0; i < popSize; i++) { pop.add(randomResult()); } //每一代胜出者数目 int topelite = (int) (elite * popSize); ArrayList<Score> scores = new ArrayList<Score>(); for (int j = 0; j < maxiter; j++) { for (int x = 0; x < popSize; x++) { Score s = new Score(); s.list = pop.get(x); s.price = scheduleCost(pop.get(x)); scores.add(s); } CompareScore cs = new CompareScore(); Collections.sort(scores, cs); ArrayList<int[]> ranked = new ArrayList<int[]>(); for (int m = 0; m < popSize; m++) { pop.remove(0); ranked.add(scores.get(m).list); } for (int n = 0; n < topelite; n++) { pop.add(ranked.get(n)); } while (pop.size() < popSize) { if (random.nextDouble() < mutprob) { //变异 int c = random.nextInt(topelite); pop.add(mutate(ranked.get(c), step)); } else { int c1 = random.nextInt(topelite); int c2 = random.nextInt(topelite); pop.add(crossOver(ranked.get(c1), ranked.get(c2))); } } System.out.println(scores.get(0).price); } return scores.get(0).list; } /** * 变异 * * @param vec * @param step * @return */ public int[] mutate(int[] vec, int step) { int[] mutateR = new int[MEMBER_NUM * 2]; long seed = System.nanoTime(); Random random = new Random(seed); int index = random.nextInt(MEMBER_NUM * 2 - 1); if (random.nextDouble() < 0.5 && vec[index] > 0) { for (int i = 0; i < MEMBER_NUM * 2; i++) { if (i == index && (vec[i] - step) > 0) { mutateR[i] = vec[i] - step; } else { mutateR[i] = vec[i]; } } } else { for (int i = 0; i < MEMBER_NUM * 2; i++) { if (i == index && (vec[i] + step) < 9) { mutateR[i] = vec[i] + step; } else { mutateR[i] = vec[i]; } } } return mutateR; } /** * 交叉 * * @param r1 * @param r2 * @return */ public int[] crossOver(int[] r1, int[] r2) { int[] crossOverR = new int[MEMBER_NUM * 2]; long seed = System.nanoTime(); Random random = new Random(seed); int index = random.nextInt(MEMBER_NUM * 2 - 2); for (int i = 0; i < MEMBER_NUM * 2; i++) { if (i < index) { crossOverR[i] = r1[i]; } else { crossOverR[i] = r2[i]; } } return crossOverR; } /** * 产生一个长度为 MEMBER_NUM*2 的随机数组,数组中每个数字的值范围:(0, 9) * * @return r[<code>MEMBER_NUM</code> * 2] */ public int[] randomResult() { long seed = System.nanoTime(); Random random = new Random(seed); int[] r = new int[MEMBER_NUM * 2]; for (int j = 0; j < MEMBER_NUM * 2; j++) { r[j] = random.nextInt(9); } return r; } public static void main(String[] args) { //int[] s = {1, 4, 3, 2, 7, 3, 6, 3, 2, 4, 5, 3}; Optimization o = new Optimization(); //System.out.println(o.getMinutes(o.flights.getTimeByValue("1:21"))); o.initPeople(); //int[] best = o.randomOptimize(100); //int[] best = o.hillclimb(); // int[] best = o.annealingoptimize(10000.0, 0.95, 2); int[] best = o.geneticoptimize(50, 2, 0.2, 0.2, 100); o.printSchedule(best); } }
/** * * FILENAME: Flights.java * AUTHOR: vivizhyy[at]gmail.com * STUID: whu * DATE: 2010-4-12 * USAGE : */ package ch5.optimization; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.joda.time.LocalTime; public class Flights { private String origin; private String dest; private LocalTime depart; private LocalTime arraive; private float price; public static String SCHEDULE = "schedule.txt"; public Logger log = Logger.getLogger(Flights.class.getName()); public Flights() { } public LocalTime getArraive() { return arraive; } public LocalTime getDepart() { return depart; } public String getDest() { return dest; } public Logger getLog() { return log; } public String getOrigin() { return origin; } public float getPrice() { return price; } public void setArraive(LocalTime arraive) { this.arraive = arraive; } public void setDepart(LocalTime depart) { this.depart = depart; } public void setDest(String dest) { this.dest = dest; } public void setLog(Logger log) { this.log = log; } public void setOrigin(String origin) { this.origin = origin; } public void setPrice(float price) { this.price = price; } /** * * @return */ public static Flights[] getFlights() { Flights flights[] = new Flights[120]; for(int i = 0; i < 120; i++) flights[i] = new Flights(); PropertyConfigurator.configure("D:/Documents/NetBeansProjects/CollectiveProgramming/src/log4j.properties"); BufferedReader reader = null; String line; try { reader = new BufferedReader(new FileReader(SCHEDULE)); int count = 0; while ((line = reader.readLine()) != null && count < 120) { //init flights String result[] = line.split(","); if (result.length == 5) { flights[count].origin = result[0]; flights[count].dest = result[1]; flights[count].depart = getTimeByValue(result[2]); flights[count].arraive = getTimeByValue(result[3]); flights[count].price = new Integer(result[4]); count++; } else { System.err.println("schedule format wrong."); } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException ex) { ex.printStackTrace(); } } } return flights; } /** * * @param time * @return */ public static LocalTime getTimeByValue(String time) { int mark = time.indexOf(":"); int hour = new Integer(time.substring(0, mark)); int minute = new Integer(time.substring(mark + 1, time.length())); LocalTime timeResult = new LocalTime(hour, minute); return timeResult; } /** * * @param strOrigin * @param strDest * @return */ public Flights[] getFlightByOriginAndDest(String strOrigin, String strDest) { Flights[] resultSet = new Flights[15]; Flights flights[] = getFlights(); int count = 0; for (Flights f : flights) { if(count > 14) { log.error("flight time lager than define."); break; } if (f.origin.equals(strOrigin) && f.dest.equals(strDest)) { resultSet[count++] = f; } } return resultSet; } public String toString() { return this.origin + "\t" + this.dest + "\t" + this.depart + "-" + this.arraive + "\t" + "$" + this.price; } }
/** * * FILENAME: Score.java * AUTHOR: vivizhyy@gmail.com * STUID: whu200732580127 * DATE: 2010-4-13 * USAGE : */ package ch5.optimization; import java.util.Comparator; public class Score { public int[] list = new int[12]; public double price; } class CompareScore implements Comparator{ public int compare(Object o1, Object o2) { Score s1 = (Score)o1; Score s2 = (Score)o2; int flag = 0; if(s1.price > s2.price) flag = 1; return flag; } }
发表评论
-
Java 并发之共享对象
2013-10-08 18:29 2217上一篇文章说的是,避免多个线程在同一时间访问对象中的同一数据 ... -
Java 并发之线程安全
2013-10-08 14:30 883写线程安全的代码,说白了就是管理一个类的共享的、可变的状态 ... -
UTF8 与 UTF16 编码
2012-05-20 21:11 6541Unicode 的发展,英文好的直接去 unicode.org ... -
从 char 数组 parseInt 实现
2012-05-17 10:07 1149代码来源于 https://svn.apache.org/re ... -
6 种 求二进制数中1的个数 算法 java 实现
2012-05-15 13:11 5294package BitCount; /** * 任意 ... -
#Lucene# org.apache.lucene.util.BitUtil.pop(long x) 笔记
2012-05-14 20:53 1176今天读 Lucene 源码,有这样一个函数: /** Ret ... -
文档过滤
2010-04-15 09:56 910算法来自于《集体智慧编程》-第六章 原书代码用 Pyth ...
相关推荐
在本资源包“Excel表格+Word文档各类各行业模板-旅行社组团出境旅游情况基层报表.zip”中,包含了一个重要的Excel文件“Excel表格+Word文档各类各行业模板-旅行社组团出境旅游情况基层报表.xls”。这个文件专门针对...
系统设计与实现的目标是构建一个能够高效处理旅游信息、优化业务流程并提供决策支持的平台。 首先,经济可行性分析表明,开发旅游管理信息系统是经济上合理的。随着旅游业的发展,引入自动化系统可以降低运营成本,...
对于乡村旅游地组团的划分有助于更好地理解和优化武汉市乡村旅游空间布局,强化组团内部各目的地间的协作,实现旅游资源的有效整合。组团化战略的提出,不仅响应国家的“全域旅游”政策,更对区域旅游发展具有指导...
【生态旅游型城市综合交通体系】是指在尊重和保护生态...武义县的案例研究为其他生态旅游型城市提供了实践参考,通过上述对策的实施,可以有效解决生态旅游型城市面临的交通挑战,实现旅游发展与环境保护的和谐共生。
在旅游规划中,功能分区是为了优化旅游体验和资源管理,通常会将旅游区划分为不同的功能区域,如"一湾两翼三功能组团"模式。这种模式下,"一湾"可能代表核心的海滨景观区,"西翼"和"东翼"可能是两个特色鲜明的休闲...
本旅游管理系统旨在模拟旅行社的日常运营,通过数据库技术实现对旅游线路、游客报名、旅游团组建、旅游班次安排、宾馆住宿、导游陪同及保险购买等一系列流程的管理。系统设计的核心是确保数据的一致性、完整性和安全...
这一实施方案的核心目标是提升旅游服务质量,优化游客体验,促进旅游行业的综合发展。 一、综合信息采集体系 构建智慧旅游系统的第一步是建立全面的游客信息采集体系。这包括通过会员制管理平台,方便游客快速便捷...
- **特点介绍**:利衡旅游管理软件V3.1具备智能化的组团计调功能,能够根据用户输入的信息自动进行资源分配与成本计算。 - **应用场景**:当旅行社需要组织旅游团时,可以通过该功能快速完成行程安排、费用预算等...
随着互联网的普及,建立旅游平台成为解决这一问题的有效途径。平台可以整合产业链资源,提供一站式服务,增强游客体验,同时也为旅游服务提供商创造更多业务机会。 XXAA国际旅行社作为合作伙伴,具有丰富的行业经验...
旅游尾单的来源包括半自助或跟团游产品的剩余、组团社或OTA的打包产品、以及由于临时退团等原因产生的特价产品。这些尾单产品通常通过网络和社群媒体进行销售,但存在单群操作、价格虚高、付款方式单一和缺乏专业...
随着互联网技术的进步和消费者需求的多元化,旅游在线平台需不断优化服务,提升用户体验,满足不同类型的游客需求,同时促进旅游产业的数字化和智能化发展。 总结来说,“旅游在线平台”的核心在于利用信息技术整合...
旅游平台网站合作建设实施计划方案的核心目标是利用...综上所述,旅游平台网站的合作建设将通过技术创新和资源整合,实现旅游业的数字化转型,为游客和商家提供更高效、便捷的服务,同时也为整个行业带来新的增长点。
用户可以发布、浏览组团信息,参与讨论,分享旅游心得。系统还设有推举模块,根据用户行为和偏好,推荐相应的旅游产品和服务。 1.4 安全与维护 系统应具备良好的安全防护机制,包括数据加密、防止SQL注入、XSS攻击...
通过这些模块的集成,旅游业务管理系统实现了旅游业务的全程自动化,有助于旅行社优化资源配置,提升服务质量,降低运营成本,从而在激烈的市场竞争中保持优势。同时,系统的灵活性和扩展性使其能够随着旅游行业的...
这个网站的核心特点是将报名、组团和旅游服务整合到一个统一的电子商务平台上,方便用户在线完成从查询到报名的全过程。 1. **源码结构**: 提供的文件名列表揭示了网站的基本架构和功能模块。`db.asp`可能是...
14. **旅游 DIY 自助报价组团系统**:允许用户自定义行程,自主报价,满足个性化需求。 15. **旅行社办公自动化 OA 模块**(可选项):优化内部流程,提高工作效率。 旅游网站解决方案应具备高度的稳定性和可用性...
这包括但不限于信息及新闻管理、景点信息管理、线路预订、酒店预订、客户订单管理、会议预订、机票预订、留言管理、广告发布、自助链接、天气预报、旅游论坛以及旅游DIY自助报价组团系统等。这些功能模块旨在打造一...
- 实现旅游管理工作的规范化、系统化、程序化,进而提高整个行业的运作效率和服务质量。 #### 二、关键技术选型 - **前端技术**:JSP (Java Server Pages) - JSP 是一种基于 Java 的服务器端技术,用于动态生成 ...
通过数据挖掘技术,系统能够收集和分析游客行为,为旅游决策提供依据,例如优化路线、预测人流、改进服务等。 4. 物联网应用 物联网技术可以用于景点的智能化管理,如实时监控客流,提供精准导航,甚至实现智能停车...
- 成立于20__年,是一家集航空客票销售、旅游组团、接待、旅游车队为一体的综合性服务机构。 - 坚持科学化管理和高质量服务,在业内建立了良好的信誉。 - 拥有一支经验丰富、高素质、高效率的管理团队和服务人员。 -...