02 2014 档案

游戏AI的综合设计
摘要:学校的MSTC要出杂志,第一期做游戏专题,我写了一下AI,发在“技术入门”栏目。对AI做这样整体设计的内容网上不多见,还请各位高手多多指正~游戏AI的综合设计AI (Artificial Intelligence)作为游戏的重要组成部分,对游戏的可玩性起到越来越大的作用。玩家早已不满足傻瓜似的敌人和NPC,渴望见到能像人一样思考的虚拟人物。本文首先介绍游戏常见的人工智能技术,然后综合利用各种技术设计一个较为通用的AI引擎。有限状态机(FSM):有限状态机是游戏中最常用的人工智能技术,其他技术基本都需要有限状态机的支持。有限状态机把单位的行为抽象成若干种状态,在一定的条件下状态之间可以相互转换。 阅读全文

posted @ 2014-02-28 21:07 berkeleysong 阅读(263) 评论(0) 推荐(0)

非常好的理解遗传算法的例子
摘要:遗传算法的手工模拟计算示例为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各 个主要执行步骤。 例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种 符号串。本题中,用无符号二进制整数来表示。 因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它 们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可 行解。 例如,基因型 X=101110 所对应的表现型是:x=[ 5,6 ]。 个体的表现型x和基因型X之间可通过编码和解码程序相互转换。(2) 初始群 阅读全文

posted @ 2014-02-27 19:48 berkeleysong 阅读(96) 评论(0) 推荐(0)

《微软等数据结构+算法面试100题》自娱自解(完结)
摘要:这段日子工作不忙,心情也不错,为了娱乐和干点什么,把网上的一篇贴《微软等数据结构+算法面试100题》做了一遍。感觉不错,大部分是比较基础。除了个别语法题由于对该语言不熟无法下手之外,其余的连查带想地全部搞定!边做的同时也做了些记录工作,大都是写出了思路或算法。觉得个别有必要编码验证的也实验了,当然,有一部分是编码验证计划中的,回来有时间慢慢完成。此刻,想起前辈的那句话:先了解一些XXX、掌握XXX等知识,一般的题就不在话下了。什么叫一般的题?这些算吗?虽然略有些小成就感,但自知对某些知识掌握还是不透。有时瞪大了双眼也看不出问题所在,有种文盲看报的感觉,自知水平还是有待提高的。不管如何,路还很长 阅读全文

posted @ 2014-02-20 13:17 berkeleysong 阅读(658) 评论(0) 推荐(0)

矩阵分解在推荐系统中的应用
摘要:矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素 的影响,有非常好的扩展性,因为要考虑多种因素的综合作用,往往需要构造cost function来将矩阵分解问题转化为优化问题,根据要考虑的因素为优化问题添加constraints,然后通过迭代的方法进行矩阵分解,原来评分矩 阵中的missing vlaue可以通过分解后得到的矩阵求的。本文将简单介绍下最近学习到的矩阵分解方法。(1)PureSvd怎么评价这种方法呢?开始觉得这种方法很神奇很数学,而且在实际使用的时候也非常好用。但最近读了Yehuda大神的p 阅读全文

posted @ 2014-02-18 19:14 berkeleysong 阅读(274) 评论(0) 推荐(0)

白话快速排序
摘要:快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数 阅读全文

posted @ 2014-02-14 21:24 berkeleysong 阅读(114) 评论(0) 推荐(0)

openMP的一点使用经验
摘要:最近在看多核编程。简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括openMP和TBB。按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃openMP,转向TBB。但我试下来,TBB还是比较复杂的,相比之下,openMP则非常容易上手。因为精力 阅读全文

posted @ 2014-02-14 16:52 berkeleysong 阅读(146) 评论(0) 推荐(0)

时间复杂度 与 空间复杂度
摘要:算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。(2)时间复杂度在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下, 阅读全文

posted @ 2014-02-13 14:32 berkeleysong 阅读(124) 评论(0) 推荐(0)

线程同步之互斥锁函数
摘要:前文介绍了互斥锁同步的两种方法:atomic和critical,本章介绍OpenMP提供的互斥锁函数。互斥锁函数类似于Windows、Linux下的mutex。1. 互斥锁函数 函数声明 功能 void omp_init_lock(omp_lock*) 初始化互斥器 void omp_destroy_lock(omp_lock*) 销毁互斥器 void omp_set_lock(omp_lock*) 获得互斥器 void omp_unset_lock(omp_lock*) 释放互斥器 void omp_test_lock(omp_lock*) 试图获得互斥器,如果获得成功则返回true,否则返 阅读全文

posted @ 2014-02-12 15:59 berkeleysong 阅读(497) 评论(0) 推荐(0)

导航