编程之美学习 连载之十三:4.4 离散优化问题搜索框架 overview - Silver的日志 - 网易博客



启发式搜索算法A* (可参考http://theory.stanford.edu/~amitp/GameProgramming/) 和遗传算法GA分别是精确搜索和近似搜索,两者原理完全不同。但是在研究过程中我发现,它们却有着内在的联系,如数据结构上非常相似,几乎可以一一对应,如下表:

image

 

前者原理是在一棵搜索树上,通过启发函数"直捣黄龙",并尽量"砍枝";后者原理是"养活"一群物种,通过适应度函数"物竞天择",尽量保持多样化,让它们交叉,子代尽量继承父代优良基因,并通过变异来跳出局部最优。

若将两个算法并行求解,找到更好的解通知对方:GA可以用来繁殖出更好的解;A*可以提高"砍枝条件"。GA 虽然是近似求解,但是拥有的变异机制常常可以跳出局部最优,因此两种算法结合可以优势互补,我们暂且称此算法为GA*

*注,可能有同学会觉得奇怪,A*是用来规划路径的,怎么拖这里来了,其实改造下它可以用到好多地方。

image

 

    总体思路如上图,对于一个离散型优化问题:

  1. 在一定条件下,A*, GA, GA*三种算法都可以独立求解;
  2. 若解空间可以组织成树型结构,那么就可以采用A*精确求解(当然其他两种也可以了);
  3. 若解空间可以组织成树型结构,但是解空间太大,那么可以采用GA*混合求解;
  4. 若解空间无法列举,可以尝试设计GA。可以看出,其普适性最广,唯一缺点是不保证最优。

    这个搜索框架具备良好的可扩展性,可以解决很多问题,下面简单列出UML类图,后续连载再step by step解释吧:)

离散型优化问题求解框架


Read full article from 编程之美学习 连载之十三:4.4 离散优化问题搜索框架 overview - Silver的日志 - 网易博客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts