分类: 默认

  • 模糊语意变数、规则和模糊运算–AForge.NET框架的使用(二)

    模糊语意变数、规则和模糊运算–AForge.NET框架的使用(二)

    语意变数(Linguistic Variable)

    语意变数存储了数个语意量(标签),每个语意量包含一个识别名和模糊集合。在宣告陈述时每个语意量只能和在同一变数中的语意比较。

    举个很简单的例子,我们有一个名为temperature的语意变数,它包含4个语意量,名为cold、cool、warm、hot,这也是各自的标签名,同时它们还有各自的隶属度函数。

    那么我们就在接下来的系统中使用诸如temperature is hot或者temperature is not hot等等了。

    //语意变数的声明 LinguisticVariablelvTemperature = new LinguisticVariable("Temperature",0,50);//模糊集合和隶属度函数 TrapezoidalFunctionfunction1 = new TrapezoidalFunction(10,15, TrapezoidalFunction.EdgeType.Right); FuzzySetfsCold = new FuzzySet("Cold", function1); TrapezoidalFunctionfunction2 = new TrapezoidalFunction(10,15,20,25); FuzzySetfsCool = new FuzzySet("Cool", function2); TrapezoidalFunctionfunction3 = new TrapezoidalFunction(20,25,30,35); FuzzySetfsWarm = 
  • 模糊集合和隶属度函数–AForge.NET框架的使用(一)

    模糊集合和隶属度函数–AForge.NET框架的使用(一)

    什么是AForge.NET?

    AForge.NET是一个为开发人员和研究人员开发的框架,它可以用于计算机视觉,遗传算法,图像处理,神经网络,机器人学习与控制,机器学习和模糊系统。

    AForge.NET的官方文档比较丰富,网上也有一些相关文章,但是多是关于视觉和神经网络的,而我个人对模糊系统比较感兴趣,故写下自己的一些感受。

    模糊系统和模糊理论简述

    模糊系统主要是区别于经典系统(或称为常规系统)。在研究人机系统,管理系统,特别是经济和社会系统时,由于加入人的逻辑、推理、判断,很多决策很难做到完全精确,这些和人有关的系统就拥有了某种模糊性。

    在常规系统中,如果一个系统在某刻的状态和输入一旦决定,下个时刻的状态和输出就可以确定。如果下一个状态不能确定,但是可以给出概率分布,就成为随机系统。如果概率分布都不能给出,但是可以给出所有可能状态的集合,而且所有可能状态的集合使用模糊集合来表示,就成为模糊系统。

    客观世界中普遍存在着模糊现象,比如“年轻人”和“老年人”就是模糊概念,它们没有明确内涵和外延,但是使用这些概念时却很少产生误解和歧义。可以说值逻辑只是理想世界的模型,而不是现实世界的模型。

    隶属度函数(Membership Function)和模糊集合(Fuzzy sets)

    隶属度函数是模糊系统的数学基础,它突破了经典集合理论的局限,模糊概念的定量表示成为可能。

    membership1

    棕色的曲线就是一个隶属度函数,0是不属于,1是完全属于。由于模糊性,所以用[0,1]上的数代替0和1。

    而这个值就是就是属于模糊集合的程度。

    membership2

    而一个模糊集合可以分为两个部分,其中一个成为core,它是一个每个X的隶属度都是1的宽松集合。

    c1

    还有一部分成为boundary,它包含了所有隶属度在0,1之间的元素。

    c2

    隶属度函数的选择主要由模糊集合决定。如果某个集合含有大量的值或者它是连续的,那么一个参数化表示的隶属度函数是适合的,一般分段的线性隶属度函数(Piecewise linear membership functions)是比较好的,它简单而且在计算上是高效的。较常用的是梯形或者三角形,由4或3个参数定义。

    以温度为例,在实际生活中我们常说多少度,冷不冷。多少度可以是一个确定的数值或者区间,但是冷不冷就不能固定化,很难找到固定的爆破值。一般可以大致成为冷,暖和,热。

    c3

    可以认为该隶属度函数为A(x)=暖和。

    c4

    c5

    这是热。

    AForge.NET表示模糊集合和隶属度函数

    需要用到到AForge,AForge.Fuzzy和AForge.Controls。

    AForge是核心类,AForge.Fuzzy有关模糊系统的,而AForge.Controls是一些控件,比较常用的是表格(chart)控件。

    可以去http://code.google.com/p/aforge/下载,然后引用需要的。我直接用的NuGet。

    membership3

    AForge.Fuzzy在NuGet没有哈。

    PiecewiseLinearFunction类无疑是最灵活的,但是如果隶属度函数是梯形或者三角形,有个更快捷的类可供使用:TrapezoidalFunction。

    比如我们要建立一个梯形的隶属度函数,如果:

    c3

    有4个点要注意,(10,0)和(40,0),它们是boundary的边界。(20,0)和(30,0)是core的边界。

    TrapezoidalFunction functionCool =new TrapezoidalFunction(10,20,30,40);FuzzySet fsCool =new FuzzySet("COLD", functionCool);
  • Ajax实现评论的顶和踩功能

    Ajax实现评论的顶和踩功能

    这算是社团布置的一个假期小作业吧,我只是提出我自己的解决方案,不一定是最合适的。

    效果大致如下:

    2

    javascript这块使用jquery。新建一个Asp.net web项目,使用NuGet获取Jquery最新版。

    ajaxDemo1

    数据库方面使用Nhibernate,用Install-Package Nhibernate引用。

    数据库是用的PostgreSQL,Install-Package Npgsql把驱动装上。我这里偷个懒,数据库名,用户名和密码都是ajaxDemo了。

    创建数据库:

    CREATE DATABASE "ajaxDemo" WITH OWNER = "ajaxDemo" ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'Chinese (Simplified)_People''s Republic of China.936' LC_CTYPE = 'Chinese (Simplified)_People''s Republic of China.936' CONNECTION LIMIT = -1;
  • 真心好用的VS扩展–NuGet

    真心好用的VS扩展–NuGet

    无聊中手机上网翻到的,先没明白这是什么东西,等我实际体验了一把以后完全震惊了,太给力了!

    NuGet的官方说明是:NuGet是一款Visual Studio的扩展,它可以简单的安装、升级开源库和工具。

    官网地址:http://www.nuget.org/

    官网最醒目的位置就是下载链接,安装完成后我们来快速体验一把。

    手上有个小项目需要使用到json格式,一般情况我会先Google一下有没有相关的开源库(这个肯定是有的)。

    然后从一些博文中发现了Json.net,然后继续Google之,找到Json.net的官网,然后下载最新的稳定版本,找出DLL文件引用它。

    是不是很复杂?很繁琐?(其实没用NuGet之前我一直觉得这样干很方便的)

    使用NuGet我们就可以很快搞定了。

    右键Managet NuGet Packages

    nuget1

    搜索json,然后看看结果和右侧的介绍,Json.net排在第一位,点Install安装。

    nuget2

    然后等待下载完成,可以看到引用里面已经有了Json.net了。

    nuget3

    那么NuGet到底干了什么呢?下载的开源库在何处呢?看一下输出结果就知道了。

    nuget4

    在packages文件夹下可以找到相关dll文件。

    nuget5

    还有命令行模式可以选用

    还是以Json.net举例,输入Install-Package Newtonsoft.Json即可。

    nuget7

    NuGet还有一个优势就是可以处理依赖(我个人觉得Net的依赖复杂程度没有java麻烦)。以Spring.Core为例子,它依赖Common.Logging。

    自然NuGet完美解决了。

    nuget9

    我没有试升级库功能,但是个人感觉NuGet还是有一些局限的。

    首先需要联网(其实可以建立自己的服务器…我粗心了,谢谢了楼下各位了),其次是每次都下载新的,而且会把针对不同.Net版本的都down下来。…

  • 分享几篇文章(PDF版)

    后天就要回老家了,除了团团年估计也没有其他好玩的,就琢磨下点经典文章带回去看看。

    Google一番找到了老赵很早以前的文章:

    http://www.cnblogs.com/JeffreyZhao/archive/2009/03/02/1401259.html

    说来惭愧,里面的十余篇文章我只看过一篇,正好就补补知识。

    原文给出的连接多是在线版,我找了部分的pdf给大家分享一下。

    合集下载:

    所有程序员都应该至少读上两遍的十篇论文.rar

    单个文章:

  • Jelastic–支持java的PaaS

    Jelastic–支持java的PaaS

    最开始使用的是gae,被墙以后转战sae。虽然sae用着也不错,但是php用着始终没有java熟悉。

    在网上游荡时发现Jelastic,虽然是测试版,但是功能什么的毫无含糊,用着也很方便。

    地址:http://app.jelastic.servint.net/

    1.首先注册账号,登陆。

    jelastic1

    2.从Email中得到密码后登陆。

    jelastic2

    点击Create Environment。有4中容器可以选择,Jetty,Glassfish,Tomcat 6,Tomcat 7.下面还可以选择MySql和NoSql(可以选择MongoDB获取CouchDB)。还有Nginx可选。

    jelastic3

    右边虽然有价格计算器,不过不用担心,都是$0。基本上可以说Jelastic是免费,有兴趣研究的可以看一下它的价格策略。

    选择好以后输入自定的3级域名,然后点Create。创建环境需要几分钟。

    jelastic5

    现在我们来建一个Hello World.我用的netbeans。

    改一下index.jsp的文字意思一下。

    jelastic4

    然后生成war包。上传到Jelastic去。将其部署到刚才新建的环境当中。

    Ok了,访问http://htynkn.jelastic.servint.net/可以看到效果:

    jelastic7

    jelastic还可以绑定域名。我申请了一个免费域名htynkn.tk。在域名管理中心添加一条CHAME就行了。

    jelastic9

  • 是sourceForge还是google code?

    是sourceForge还是google code?

    最近写了一点小东西,想把代码放到网上。最先想到的是google code,没有其他什么说的,界面简单,使用方便。

    svn服务器速度也不错,校园网这个渣速也可以跑到40K/S。用着用着就觉得有点纠结了,因为仔细研究了一下sourceForge,觉得也不错,有点像移动到sourceForge上去。

    但是sourceForge的速度有点纠结了,还有满屏的英语…看着有点困难。而且建立项目的界面改了,有点不知所云。(可以切换到老界面创建项目)。

    仔细比较了一下觉得二者各有优劣,遂把随感随想写成博文,一方面给后来人参考,一方面想听听其他朋友的看法。

    1.google code

    优点:

    *毫无悬念,速度快,特别是SVN服务器,提交代码时感觉很爽。

    *界面简单,极其一般的英语水准都可以胜任。

    *上手容易,快速体验。

    劣势:

    *功能较弱,一般的需求没有问题,但是SVN权限划分,wiki的支持上都有不是很强。

    *没有统计,虽然Google Code集合自家产品的统计,但是我觉得Google Analytics是做网站统计,对于svn库没有统计,对于下载等的统计没有单独划分出来。

    *稳定性不够.有时候会访问不起。(我觉得是被盾了)

    2.sourceForge

    优点:

    *老牌,用户量,各方面的操作和管理方式都经过了时间的考验。

    *功能服务,只要你能够想到的,都会有提供,实在没有的你还可以在Hosted Apps里面找找。

    *提供了web空间,可以更随意的表现。

    缺点:

    *因为功能丰富,所以上手有点困难。

    *速度,速度,有时候确实有点慢。

     

    其实依我来看,Google Code拿来做点简单的还是可以的,特别是你的项目本身就有网站什么的,不足的功能可以自己架。偶尔的无法访问也没有大的影响。

    如果你需要强大的功能,而且可以接受有点慢的速度,那就推荐sourceForge了。

    我在两者上面都建立了一个项目,监控了几天在线率,结果如下:

    gs2

    Google Code的无法访问一般就是几分钟的事情。

    gs1

  • C#使用NSoup解析HTML的乱码解决

    NSoup是JSoup的Net移植版本。使用方法基本一致。

    如果项目涉及HTML的处理,强烈推荐NSoup,毕竟字符串截断太苦逼了。

    下载地址:

    http://nsoup.codeplex.com/

    简单用法如下:

    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

    处理网络上的页面:

    NSoup.Nodes.Document doc = NSoup.NSoupClient.Connect("http://www.cnblogs.com/htynkn/").Get();

    但是遗憾的是NSoup默认的编码是UTF-8,处理中文有乱码(对于编码是UTF-8的自然不会有乱码,但是有些GB2312的就可能有乱码,谢谢 forhells的提醒)。

    目前我找到两种解决办法:

    1.下载网页源代码再处理

    WebClient webClient =new WebClient();
    String HtmlString=Encoding.GetEncoding("utf-8").GetString(webClient.DownloadData("http://www.cnblogs.com/htynkn/"));
    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

    2.获得网页的流

    WebRequest webRequest=WebRequest.Create("http://www.cnblogs.com/htynkn/");
    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(webRequest.GetResponse().GetResponseStream(),"utf-8");

    第二种用着比较方便,但是我觉得第一种比较合适,毕竟NSoup是个Html解析类,下载网页代码这种事情本来不应该交给它。…

  • Android自动匹配电子邮件地址,网址,电话–谈Linkify的使用

    Android自动匹配电子邮件地址,网址,电话–谈Linkify的使用

    翻看Android Api,无意看到了Linkify。按照Api的说明,Linkify可以转化符合匹配规则的文字为可点击的连接。

    感觉这个还是有点用处,下面来试一试。

    1.新建一个项目

    SpxImage

    2.修改样式文件

    为了方便查看效果,添加一个EditText和一个TextView

    SpxImage

    代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightsum="1">
    <edittext android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/inputText">
    <requestfocus></requestfocus>
    </edittext>
    <textview android:layout_height="wrap_content" android:textappearance="?android:attr/textAppearanceLarge" android:layout_width="fill_parent" android:layout_weight="0.08" android:id="@+id/viewText" android:text="请输入内容"></textview>
    </linearlayout>

    3.修改AndroidLearnActivity.java

    看一下关键部分的说明

    SpxImage

    在本例子中我们使用第一个。再看一看Linkify默认支持识别什么。

    SpxImage

    MAP_ADDRESSES我没有理解到…

    下面看一下完整的代码:

    package cn.ghy.sdx;
    import android.app.Activity;
    import 
  • Android中使用Ormlite实现持久化(二)–持久化类的详细配置

    上一篇文章简单的使用了Ormlite一下,但是我觉得Ormlite出色之处就是对于需要字段,表等等的配置设计的比较好。

    下面来说说类的配置:

    如果我们开发的Android应用需要保持用户信息,那么现在新建一个类:UserAccount

    该类有六个变量:

    privateint id;private String username;private String password;private Date regTime;private String tellphone;private String email;

    用eclipse生成get和set方法:

    publicintgetId() {return id; }publicvoidsetId(int id) {this.id = id; }public StringgetUsername() {return username; }publicvoidsetUsername(String username) {this.username = username; }public StringgetPassword() {return password; }publicvoidsetPassword(String password)