精华内容
下载资源
问答
  • 【例】利用遗传算法计算函数f(x)=x*cos(5*pi*x)+3.5在区间[-1,2.5]上的最大值 先在工作区建立上面函数的一个m文件并保存,命名为fun_sigv.m: function y=fun_sigv(x) y=x.*cos(5*pi*x)+3.5; ...

    遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架。

    先从例子开始,慢慢再总结理论。。。

    【例】利用遗传算法计算函数f(x)=x*cos(5*pi*x)+3.5在区间[-1,2.5]上的最大值

    先在工作区建立上面函数的一个m文件并保存,命名为fun_sigv.m:

    function y=fun_sigv(x)
        y=x.*cos(5*pi*x)+3.5;
    

    代沟是父代中需要经过选择、交叉、变异得到下一代的比例,例如父代共100个个体,代沟为0.9,表明有90个个体被选中进行上述一系列操作进化到下一代,剩下10%不变、直接进入下一代,也即下一代还是100个个体。

    tarce是代数*2的二维矩阵,存储各子代种群最优解和各子代种群平均值

    fieldd是区域描述器,有的书中[1]叫译码矩阵。其结构为

      FieldD=[len,lb,ub,code,scale,lbin,ubin]';('代表转置,也就是FieldD是列向量)

      len是每个chrom的长度,lb和ub是行向量,分别指明每个变量使用的下界和上界。

      code是二进制行向量,code(i)=1为标准二进制编码,code(i)=0为格雷码。

      scale是二进制行向量,指明每个子串是否使用对数或算数刻度。0为算数刻度,1为对数刻度。

      lbin和ubin是二进制行向量,指明表示范围中是否包含每个边界。选择lbin=0或ubin=0,从表示范围中去掉边界;lbin=0或ubin=1则表示包含边界。

    fieldd在二进制串到实值转换函数bs2rv中用到:Phen=bs2rv(Chrom,FieldD),即根据译码矩阵FieldD将二进制串矩阵Chrom转换为实值向量。返回矩阵Phen包含对应的种群表现型。对于bs2rv函数,如果使用对数刻度,其范围不能包含零。

    下面是MATLAB代码:

    opt_minmax=1;   %目标优化类型:1最大化、0最小化
    num_ppu=50;     %种群规模即个体个数
    num_gen=60;     %最大遗传代数
    len_ch=20;          %基因长度
    gap=0.9;            %代沟(Generation gap)
    sub=-1;         %变量取值下限
    up=2.5;         %变量取值上限
    cd_gray=1;      %是否选择格雷码编码方式:1是、0否
    sc_log=0;       %是否选择对数标度:1是、0否
    trace=zeros(num_gen,2);     %遗传迭代性能跟踪器
    fieldd=[len_ch;sub;up;1-cd_gray;sc_log;1;1];    %区域描述器
    chrom=crtbp(num_ppu,len_ch);     %初始化生成种群
    k_gen=0;
    x=bs2rv(chrom,fieldd);     %翻译初始化种群为10进制
    fun_v=fun_sigv(x);          %计算目标函数值
    tx=sub:.01:up;                
    plot(tx,fun_sigv(tx));
    xlabel('x');ylabel('y');
    title('一元函数优化结果');
    hold on;
    
    while k_gen<num_gen
        fit_v=ranking(-opt_minmax*fun_v);           %计算目标函数的适应度
        selchrom=select('rws',chrom,fit_v,gap);     %使用轮盘赌方式选择
        selchrom=recombin('xovsp',selchrom);     %交叉
        selchrom=mut(selchrom);                         %变异
        x=bs2rv(selchrom,fieldd);                          %子代个体翻译
        fun_v_sel=fun_sigv(x);                               %计算子代个体对应目标函数值
        [chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
        [f,id]=max(fun_v);                                      %寻找当前种群最优解
        x=bs2rv(chrom,fieldd);                              
        f=f*opt_minmax;
        fun_v=fun_v*opt_minmax;
        k_gen=k_gen+1;
        trace(k_gen,1)=f;
        trace(k_gen,2)=mean(fun_v);
    end
    plot(x(id),f,'r*');
    figure;
    plot(trace(:,1),'r-*');
    hold on;
    plot(trace(:,2),'b-o');
    legend('各子代种群最优解','各子代种群平均值');
    xlabel('迭代次数');ylabel('目标函数优化过程');
    title('一元函数优化过程');
    

      

     求函数f(x)=x*sin(10*pi*x)+2.0,x属于[-1,2]的最大值:

    opt_minmax=1;   %目标优化类型:1最大化、0最小化
    num_ppu=50;     %种群规模即个体个数
    num_gen=25;     %最大遗传代数
    len_ch=20;          %基因长度
    gap=0.9;            %代沟(Generation gap)
    sub=-1;         %变量取值下限
    up=2;         %变量取值上限
    cd_gray=1;      %是否选择格雷码编码方式:1是、0否
    sc_log=0;       %是否选择对数标度:1是、0否
    trace=zeros(num_gen,2);     %遗传迭代性能跟踪器
    fieldd=[len_ch;sub;up;cd_gray;sc_log;1;1];    %区域描述器
    chrom=crtbp(num_ppu,len_ch);     %初始化生成种群
    k_gen=0;
    x=bs2rv(chrom,fieldd);     %翻译初始化种群为10进制
    fun_v=fun_sigv(x);          %计算目标函数值
    tx=sub:.01:up;               
    plot(tx,fun_sigv(tx));
    xlabel('x');ylabel('y');
    title('一元函数优化结果');
    hold on;
     
    while k_gen<num_gen
        fit_v=ranking(-opt_minmax*fun_v);           %计算目标函数的适应度,基于秩/排序的适应度计算。
        selchrom=select('rws',chrom,fit_v,gap);     %使用轮盘赌方式选择
        selchrom=recombin('xovsp',selchrom);     %交叉
        selchrom=mut(selchrom);                         %变异
        x=bs2rv(selchrom,fieldd);                          %子代个体翻译
        fun_v_sel=fun_sigv(x);                               %计算子代个体对应目标函数值
        [chrom,fun_v]=reins(chrom,selchrom,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
        [f,id]=max(fun_v);                                     %寻找当前种群最优解
    %     hold on; 
    %     if id<size(x,1)
    %         plot(x(id),f,'r*');
    %     end
        x=bs2rv(chrom,fieldd);                             
        f=f*opt_minmax;
        fun_v=fun_v*opt_minmax;
        k_gen=k_gen+1;
        trace(k_gen,1)=f;
        trace(k_gen,2)=mean(fun_v);
    end
    
    plot(x',fun_v','b*');
    plot(x(id),f,'rd');
    % hold on;
    % figure;
    % plot(trace(:,1),'r-*');
    % hold on;
    % plot(trace(:,2),'b-o');
    % legend('各子代种群最优解','各子代种群平均值');
    % xlabel('迭代次数');ylabel('目标函数优化过程');
    % title('一元函数优化过程');
    

      

    [1]:雷英杰,张善文,李续武,等. MATLAB遗传算法工具箱及应用. 西安:西安电子科技大学出版社,2005.

    转载于:https://www.cnblogs.com/zxhyxiao/p/9398061.html

    展开全文
  • 一元函数对象:函数参数1个; 二元函数对象:函数参数2个; 一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式 谓词可以使一个仿函数,也可以是一个回调函数。 二元谓词 函数参数2个,函数返回值是...

    谓词:

    一元函数对象:函数参数1个;

    二元函数对象:函数参数2个;

    一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式

    谓词可以使一个仿函数,也可以是一个回调函数。

    二元谓词 函数参数2个,函数返回值是bool类型

     

    一元谓词函数举例如下:

    1,判断给出的string对象的长度是否小于6

    bool GT6(const string &s)

    {

    return s.size() >= 6;

    }

    2,判断给出的int是否在38之间

    bool Compare( int i )

    {

    return ( i >= 3 && i <= 8 );

    }

    #include <iostream>  
    #include<string>  
    #include <vector>  
    #include <list>  
    #include <set>  
    #include <map>  
    #include <algorithm>  
    #include <functional>
    using namespace std;
    
    class IsEven
    {
    public:
    	IsEven()
    	{
    		n = 0;
    	}
    	bool operator()(int num)
    	{
    		if (num%2==0)
    		{
    			n++;
    			return true;
    		}
    		return false;
    	}
    	int returnN()
    	{
    		return n;
    	}
    protected:
    private:
    	int n;//记录偶数的个数
    };
    
    void display()
    {
    	vector<int> v;
    	v.push_back(1);
    	v.push_back(2);
    	v.push_back(3);
    	v.push_back(4);
    	v.push_back(5);
    	v.push_back(6);
    	v.push_back(7);
    	v.push_back(10);
    
    	IsEven is;
    	//统计vector中的偶数个数
    	is = for_each(v.begin(),v.end(),is);
    	cout<<is.returnN()<<endl;
    	
    	//查找vector第一个偶数的位置
    	vector<int>::iterator it;
    	/*
    	template<class _InIt,
    	class _Pr> inline
    	_InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)
    	{	// find first satisfying _Pred
    	_DEBUG_RANGE(_First, _Last);
    	_DEBUG_POINTER(_Pred);
    	return (_Rechecked(_First,
    	_Find_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));
    	}
    	*/
    	//find_if 返回一个迭代器
    	it = find_if(v.begin(),v.end(),is);
    	if (it!=v.end())
    	{
    		cout<< *it<<endl;
    	}
    	else
    	{
    		cout<<"没有"<<endl;
    	}
    }
    
    int main()
    {
    	display();
    	system("pause");
    	return 0;
    }



    展开全文
  • 如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to ...

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。

    If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

    1
    2
    3
    4
    5
    6
    7
    8
    这里写图片描述
    这里写图片描述

    展开全文
  • 一元函数对象:函数参数1个 二元函数对象:函数参数2个 一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数。 二元谓词 函数参数2个,函数返回值是...

    一元函数对象:函数参数1个

    二元函数对象:函数参数2个

    一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数。

    二元谓词 函数参数2个,函数返回值是bool类型

    之所以给返回布尔类型的函数对象专门命名,是因为谓词是用来为算法判断服务的。

    一元谓词

    template <typename T>
    class IsDiv
    {
    public:
    	IsDiv(const T divisor)
    	{
    		this->divisor = divisor;
    	}
    
    	bool operator()(T &t)
    	{
    		return (t%divisor) == 0;
    	}
    private:
    	 T divisor;
    };
    
    void Fun3()
    {
    	vector<int> v1;
    	for (int i = 10; i < 30; i++)
    	{
    		v1.push_back(i);
    	}
    	int divisor = 4;
    	IsDiv<int> isDiv(divisor);
    
    	//使用谓词来做函数参数  返回一个迭代器
    	vector<int>::iterator it = find_if(v1.begin(), v1.end(), IsDiv<int>(divisor));
    	if (it == v1.end())
    	{
    		cout << "不能被5整除" << endl;
    	}
    	else
    	{
    		cout <<"第一个能被"<< divisor<<"整除的数:"<< *it << endl;
    	}
    
    }

    find_if使用谓词来做函数参数  返回一个迭代器的地址

    template<class _InIt,
    	class _Pr>
    	_NODISCARD inline _InIt find_if(_InIt _First, const _InIt _Last, _Pr _Pred)
    	{	// find first satisfying _Pred
    	_Adl_verify_range(_First, _Last);
    	auto _UFirst = _Get_unwrapped(_First);
    	const auto _ULast = _Get_unwrapped(_Last);
    	for (; _UFirst != _ULast; ++_UFirst)
    		{
    		if (_Pred(*_UFirst))
    			{
    			break;
    			}
    		}
    
    	_Seek_wrapped(_First, _UFirst);
    	return (_First);
    	}

    二元函数对象

    template <typename T>
    class SumAdd
    {
    public:
    	T operator()(T &t1, T &t2)
    	{
    		return t1 + t2;
    	}
    };
    
    void Fun4()
    {
    	vector<int> v1, v2, v3;
    	v1.push_back(1);
    	v1.push_back(2);
    	v1.push_back(3);
    
    	v2.push_back(4);
    	v2.push_back(5);
    	v2.push_back(6);
    
    	v3.resize(5);
    
    	transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), SumAdd<int>());
    	for (vector<int>::iterator it = v3.begin();it <v3.end();it++)
    	{
    		cout << *it << " ";
    	}
    }

    二元谓词

    bool MyCompare(const int &a,const int &b)
    {
    	return a < b;
    }
    
    void Fun5()
    {
    	vector<int> v1;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(rand() % 100);
    	}
    	for_each(v1.begin(), v1.end(), PrintElement1<int>);
    
    	cout << "排序之后" << endl;
    	sort(v1.begin(), v1.end(), MyCompare);
    	for_each(v1.begin(), v1.end(), PrintElement2);
    
    }

     

    展开全文
  • plot是绘制一元曲线的基本函数,它利用自变量的一系列数据和应变量的值进行绘图。 1)举例画一条正弦曲线: x = linspace(0,2*pi,100); y = sin(x); plot(x,y); 2)若要画多条曲线只需要将对应坐标依次放入plot...
  • 函数对象,一元谓词,这些才听,觉得有点陌生, 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(functionobject),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过...
  •   对于求取一元函数y = f(x)的极值问题,我们可以利用暴力的手段,通过细分自变量x的定义域区间,不断带入函数表达式中比较结果得到近似的最优解。这样的方法最大的好处就是简单,但是随之带来的问题就是收敛速度...
  • 一元函数微分的本质

    2019-10-05 17:15:02
     [latexpage]  话说当年学习导数和微分的时候,我也是一头雾水。...而对于一元导数就为y的变化量dy与x的变化量dx之间的比值。   转载于:https://www.cnblogs.com/fuly550871915/p/8021521.html
  • Matlab常用函数举例(十)

    千次阅读 2012-05-02 18:13:52
    十、泛函和常微分方程求解(funfun)   1.求函数极小值点和函数零点 ...-由一有范围限制的变量找出函数的最小值 ...- 由几个变量找出函数的...求一元(非线性)函数的零点(单变量求根) 2.数值积分
  • 在上一讲的末尾我们谈到,在实际的工程当中我们常常借助计算机程序,利用迭代法进行极值的求取,这里我们首先从一元函数入手,看看如何通过这种方法找到一元函数的极值点。 1.起步:用牛顿法解方程 1.1.原理分析 在...
  • 第九讲:一元函数积分学的几何应用面积 面积 曲线y1(x)与y2(x)y_1(x)与y_2(x)y1​(x)与y2​(x)与在区间[a,b]围成的面积 S=∫ba∣y1(x)−y2(x)∣dxS=\int_b^a|y_1(x)-y_2(x)|dxS=∫ba​∣y1​(x)−y2​(x)∣dx ∣...
  • Numpy通用函数,也可以称为ufunc,是一种在ndarray数据中进行逐个元素操作的函数。...1.一元通用函数 比如sqrt或exp举例: arr = np.arange(10) print(arr) print(np.sqrt(arr)) print(np.exp(arr)) out: ...
  • 规律: (1)1.1 自变量x乘以一个大于1的数,图像沿x轴压缩,因为现在x不需要走得那么远,y就能达到原来的函数值;...其实不管函数的自变量有多少维度,每一个自变量和只有一个的因变量都遵循前述的三条规律。
  • 规律: (1)1.1 自变量x乘以一个大于...其实不管函数的自变量有多少维度,每一个自变量和只有一个的因变量都遵循前述的三条规律。 转载于:https://www.cnblogs.com/chizi15/p/9808343.html
  • 深度解析C语言中的sizeof()一元函数(整理) 整理者:余超 EMAIL:yuchao86@gmail.com 一、sizeof的概念  sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式...
  • 函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。 针对成员函数函数适配器 针对一般函数函数适配器 二、函数适配器示例 C++ Code ...
  • 一、适配器 ...函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。 针对成员函数函数适配器 针对一般函数函数适配器 二、函数适配器示例  C++ Co
  • 文章目录Java 内置四大核心函数式接口其他接口使用举例 Java 内置四大核心函数式接口 函数式接口 参数类型 返回类型 用途 Consumer 消费型接口 T void 对类型为T的对象应用操作,包含方法:void accept(T t)...
  • 输入x,计算关于x的一元多次方程的值 double x, y; Console.Write( " x= " ); x = Convert.ToDouble(Console.ReadLine()); y = Math.Pow(x, 3 ) + 2 *Math.Pow(x, 2 ) + 8 * x - 9 ; Console....
  • 一、适配器 三种类型的适配器: ...函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。 针对成员函数函数适配器 针对一般函数函数适配器 二、函数
  • 全网最全、最详细讲解C++中STL标准库里内建的函数,可当作函数对象来使用,适合初学C++小白收藏
  • 目录一元函数的导数MATLAB函数语法应用举例例1 :普通函数求导例2 :复合泛函求导例3 :矩阵函数求导多元函数的偏导数MATLAB函数语法应用举例例1 :求偏导并绘图例2 :三元函数求偏导 一元函数的导数 MATLAB函数语法...
  • 目录一、运算符重载(二元...使用公开的访问接口1.8.2方式二:友元函数1.9成员函数、静态函数、友元函数特性1.10两个特殊的运算符1.11其他的二元运算符二、运算符重载(一元运算符)2.1 一元运算符2.2 程序举例:三、运
  • 函数适配器:函数适配器能够将仿函数和另一个仿函数(或某个值、或某个一般函数)结合起来。 针对成员函数函数适配器 针对一般函数函数适配器 二、函数适配器示例 C++ Code ...
  • 函数指针和函数对象比较

    千次阅读 2019-04-17 11:48:42
    1、谓词 什么谓词,其实就是一个判断式...(1)一元谓词函数举例如下: 判断给出的string对象的长度是否小于6 bool GT6(const string &s) { return s.size() >= 6; } 判断给出的int是否在3到8之间 boo...
  • 一元谓词举例: 二元谓词举例: 2内建函数 0函数对象 重载函数调用操作符的类,其对象常被称为函数对象(function object) 它们的行为类似函数的对象,也叫仿函数(functor)其实就是重载“0”操作符,使得...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,321
精华内容 2,928
关键字:

一元函数举例