CEC2017 benchmark function调用接口
CEC2017 benchmark function可以从这里下载。
导师最近给了个课题让我自己研究,跟智能优化算法相关的,必不可免的要用到最新的CEC2017 benchmark function,然而
笔者着实踩了很多坑,第一步编译都差点跪了。
坑一:abs
如果你下载了上面的CEC2017 benchmark function,并试着按照它的指示在matlab窗口运行mex cec17_func.cpp -DWINDOWS
。
你会发现,编译根本不通过啊摔!!!!!而且错误提醒信息有几页啊摔!(′д` )…彡…彡
然后就会各种怀疑人生,是不是我下的matlab有问题啊,官方给的文件应该没问题才对啊,这个cec17_func.cpp
这么长怎么debug啊?
后面我发现只是里面的一个函数调用出错了!什么鬼,官方文档都这么不正规吗?
解决办法:打开cec17_func.cpp
,搜索abs
,将里面的abs
统统改成fabs
,对浮点数求绝对值应该用fabs
!
坑二:This function(F2) has been deleted
编译通过了,试着运行main看看?然后就会提示错误信息:This function(F2) has been deleted.
,这又是什么?
matlab为什么会提示这样的信息?然后发现是cec17_func.cpp
里把function2注释掉了,输出了这行信息...不知道
为什么要这么做,解决方法就是把那行代码注释掉并且把function2的注释去掉。
坑三:接口如何使用
其实只要知道这里的benchmark function就是用来求 fitness value的这一点再去阅读一下代码,就会很熟悉接口了。
让我们先来看看PSO_func.m
和main.m
是如何调用cec17_func.cpp
的。
先看一下main.m
的这一行:
fhd=str2func('cec17_func');
这里用了str2func()函数,fhd成为了cec17_func
的handle,之后调用fhd的时候就是在调用cec17_func
。
再来看PSO_func
.
e=feval(fhd,pos',varargin{:});
这里用了一个feval函数,你只需要知道这里返回了当前pos的fitness value就行了,pos'是pos的转置矩阵,
所以pos'是一个DNP(维度种群大小)的矩阵,而varargin{:}是具体使用哪个benchmark function。
那么这个cpp和m的交互是如何实现的呢?具体请查阅mex
命令的相关知识。
总结一下上面那段代码的含义:返回pos'的fitness value给e,varargin=1...29,代表着第varargin个benchmark function。
坑四:大规模运算
总算解决了,那么我们可以运行程序了,按照CEC2017的标准,种群大小为100,维度是10,30,100,迭代次数是维度*10000。
在我自己的电脑上跑10维的数据,每个函数跑50遍取均值,我算了一下时间一次实验大概要跑一天一夜...
然后我就去问老师要了一个实验室服务器的账号,远程控制服务器运算,睡觉起来看结果就好了。
CEC2017 benchmark function调用接口的更多相关文章
- php 调用接口
1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...
- vue 配合vue-resource调用接口,获取数据
1.先用node+express+mysql简单配置一下后台 const express = require('express');const mysql = require('mysql');con ...
- 跨域调用接口的方法之一:$.ajaxSetup()
跨域查询接口的数据,之前在公司时有发生过,产生的原因是,本地请求的域名或IP地址不一致,解除方法,也是修改域名和IP地址.比如: 接口中的数据来自IP地址:192.168.1.23/get.php 如 ...
- yii中的restful方式输出并调用接口和判断用户是否登录状态
//创建一个控制器接口 返回的是restful方式 <?php namespace frontend\controllers; use frontend\models\Fenlei; use f ...
- PHP封装curl的调用接口及常用函数
<?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $time ...
- vue中axios调用接口和用node.js跨域
<script>const API_PROXY = 'https://bird.ioliu.cn/v1/?url='import axios from 'axios'export defa ...
- jquery中ajax异步调用接口
之前写过一个原始的.无封装的页面,没有引入任何外部js,直接实例化Ajax的XmlRequest对象去异步调用接口,参见Ajax异步调用http接口后刷新页面,可对比一下. 现在我们用jquery包装 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式
转自:http://blog.csdn.net/linlzk/article/details/45536065 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而 ...
- 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)
登录 保存密码 安全 加密 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间. 你 ...
随机推荐
- Vue设置不同的环境发布程序
原文地址: http://www.cnblogs.com/JimmyBright/p/7307486.html 通常应用程序上线都会经过开发环境.测试环境.生产环境三个阶段,三个环境通常会对应有三个不 ...
- 解题:SDOI 2017 数字表格
题面 反演题,推式子么=.= $\prod\limits_{d=1}^{min(n,m)}\prod\limits_{i=1}^n\prod\limits_{j=1}^m[gcd(i,j)==d]fi ...
- 【bzoj4199】【Noi2015】品酒大会
题解 SA+并查集 把ht按大小倒序加入,并查集合并维护答案的变化: SAM 翻转串,求出SAM的parent树就是后缀树,两个串的最长公共后缀是他们lca的len值: 考率一个节点x,那么它子树里的 ...
- 【最小割】【网络流24题】【P2762】 太空飞行计划问题
Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要使 ...
- python入门:求1-2+3-4+5...99的所有数的和
#!/usr/bin/env python # -*- coding:utf-8 -*- #求1-2+3-4+5...99的所有数的和 """ 给start赋值为1,su ...
- 如何修改Windows程序的权限?
修改程序的权限需要用到3个函数: 1. 获取进程的令牌句柄: OpenProcessToken 2. 查找特权类型的ID: LookupPrivilegeValue 3. 修改进程的特权:Adjust ...
- D. Monitor Educational Codeforces Round 28
http://codeforces.com/contest/846/problem/D 二分答案 适合于: 判断在t时候第一次成立 哪个状态是最小代价 #include <cstdio> ...
- 梯度提升树GBDT算法
转自https://zhuanlan.zhihu.com/p/29802325 本文对Boosting家族中一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 简 ...
- P2306 被yyh虐的mzc
P2306 被yyh虐的mzc 容量为 \(V\), 有 \(n\) 件物品, 反正直接背包绝对超时 , 每个有重量和价值 \(a_{i}, b_{i}(a_{i}, b_{i} <= 10)\ ...
- python中的常用模块(2)
在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件), 经常要对大量文件和大量路径进行操作,这就依赖于os模块. 1.当前路径及路径 ...