MATP ManyTask Multitask Problem和Solution的变量范围

觉得有用的话,欢迎一起讨论相互学习~

参考文献
https://blog.csdn.net/u013555719/article/details/103569252
https://blog.csdn.net/u013555719/article/details/103595998

我们知道在多个任务一起优化的时候,任务即Problem有不同的变量范围,但是在多任务优化中我们需要使用相同的决策变脸对其进行表示而在解决问题时又要将其映射回自身的空间。

  • 因此在MMDTLZ问题evalute函数的第一句即会调用Problem类的scaleVariables函数
public void evaluate(Solution solution) throws JMException {double vars[] = scaleVariables(solution);

Problem类中的scaleVariable函数

我认为这个函数在使用同一个Problem初始化的solution解决这个任务不会有任何问题,只有在初始化solution的problem和需要解决的problem之间决策变量范围不同的情况下,也就是说在迁移的过程中,这个函数才会发生作用.

protected double[] scaleVariables(Solution solution) throws JMException {Variable[] decisionVariables = solution.getDecisionVariables();double[] x = new double[numberOfVariables_];for (int i = 0; i < numberOfVariables_; i++)x[i] = decisionVariables[i].getValue();for (int i = 0; i < numberOfVariables_; i++) {double sl = decisionVariables[i].getLowerBound();double su = decisionVariables[i].getUpperBound();double pl = lowerLimit_[i];double pu = upperLimit_[i];x[i] = ((x[i] - sl) * (pu - pl)) / (su - sl) + pl;}return x;}

注意scaleVariable函数是protected属性的,因此此处我们做外部测试时需要将其修改为public权限。

测试

1. 使用MATP1和MATP3测试集

ProblemSet matp1;
ProblemSet matp3;
matp1 = MATP1.getProblem();
matp3 = MATP3.getProblem();

2. 使用MATP1初始化SolutionSet testSSvarMATP1

SolutionSet testSSvarMATP1 = new SolutionSet();//初始化示例化的Solution
tools.InibasictestSolSet(testSSvarMATP1, matp1, -100, 100);
//Solution 0Variable
//0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  

3. 使用testSSvarMATP1解决MATP1问题

 double[] tempvar = matp1.get(0).scaleVariables(testSSvarMATP1.get(0));
//0.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0

可以看出,我们翻车了!!!

因为在我们的预想中,使用同一个任务初始化的Solution使用同一个问题进行scale结果应该不变,但是这里编程了-100,这表明scaleVariables函数我们还有一些东西没有弄明白

for (int i = 0; i < numberOfVariables_; i++) {double sl = decisionVariables[i].getLowerBound();double su = decisionVariables[i].getUpperBound();double pl = lowerLimit_[i];double pu = upperLimit_[i];
//            System.out.println("sl su pl pu" + sl+"  "+ su+"  "+ pl+"  "+ pu);
//对于MATP3问题
// sl su pl pu0.0  1.0  0.0  1.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0
// sl su pl pu0.0  1.0  -5.0  5.0

如上是MATP3中10个变量的范围,MATP3问题集变量范围

这表明下面两句话出了问题

double sl = decisionVariables[i].getLowerBound();
double su = decisionVariables[i].getUpperBound();

由于Variable类是Solution输出的因此查看Solution类,结果发现其并没有LowerLimit_和UpperLimit_属性

而调用的是ProblemSet对象的 UnifiedUpperLimit ()和 getUnifiedUpperLimit()方法,而我们知道ProblemSet对象的 UnifiedUpperLimit ()和 getUnifiedUpperLimit()是不针对单个Problem的,也就是不为了单独一个task而设置的,其统一的决策变量空间为[0,1],具体可以参考一下博文,而task即单个Problem的上下界可以通过 double pl = lowerLimit_[i];double pu = upperLimit_[i]; 获得

testSSvarMATP1.get(0).getUnifiedLowerLimit();
testSSvarMATP1.get(0).getUnifiedUpperLimit();//0//1

这样就解释的通了,因为MMDTLZ中有一句

double vars[] = scaleVariables(solution);

而将所有问题的决策空间强行从1-0之间转换到Problem类定义的范围中

因此使用全0编码的MATP1初始化的1Solution,在MATP1和MATP3问题后缩放的结果是

printdoublearray
0.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0  -100.0
printdoublearray
0.0  -5.0  -5.0  -5.0  -5.0  -5.0  -5.0  -5.0  -5.0  -5.0

玩大一点,如果使用越界的解去缩放可以不?

例如一个第一个维度为0,其余维度为100的MATP1初始化的Solution

//测试迁移时的scaleVariables函数double[] tempvar = matp1.get(0).scaleVariables(testSSvarMATP1.get(3));//因为testSSvarMATP1本身就是使用MATP1问题集合初始化的,因此此处不会有变量范围的变化tools.printdoublearray(tempvar);//此时如果使用MATP3来对matp1做scaletempvar = matp3.get(0).scaleVariables(testSSvarMATP1.get(3));tools.printdoublearray(tempvar);
//Solution 3Variable
// 0.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0  100.0
printdoublearray
// 0.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0  19900.0
// printdoublearray
// 0.0  995.0  995.0  995.0  995.0  995.0  995.0  995.0  995.0  995.0  

结论

Solution编码到0-1之间,否则evalute的时候会超过Problem的范围,这种Solution是无效的

MATP ManyTask Multitask Problem和Solution的变量范围相关推荐

  1. Entity Framework Unit Testing problem and solution(转)

    其实下文中说的解决方案不仅仅适用于应用了Ef的项目,其它涉及数据访问的测试同样适用. 不说先贴上原文链接 : (一) http://graemehill.ca/unit-testing-an-enti ...

  2. 【雅思大作文考官范文】——第十八篇:“problem and solution essay”

    题目:       More and more people are migrating to cities in search of a better life, but city life can ...

  3. MTO 和MaTO MMDTLZ

    Manytasking Jmetal代码反向解析2_MMDTLZ 觉得有用的话,欢迎一起讨论相互学习~ 这是我在写Manytask optimization时的笔记,代码地址可以下载 相关文献 [1] ...

  4. 切题 (problem)(线段树+最大流最小割)

    切题 problem description solution code description 在一个神秘的 JOSLFN 上,wzy 和 lqs2015 常年占据着切题榜的 rk1 和 rk2.现 ...

  5. UVA1363 LA3521 POJ2800 ZOJ2646 Joseph‘s Problem【约瑟夫环+数学】

    Joseph's Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7906 Accepted: 2107 Desc ...

  6. Towards Real-Time Multi-Object Tracking

    Towards Real-Time Multi-Object Tracking论文阅读 Abstract The components of traditional MOT strategies wh ...

  7. NOI2003文本编辑器

    problem 传送门 Solution 块状链表板子题-- 码了一下午,调了一晚上,代码重构了3遍,在终于过了. 还是太菜了. 移动光标的操作直接模拟即可. 插入操作,先将光标所在块分裂成两块,然后 ...

  8. 翻译:微软style的并行计算

    Parallel Microsoft-Style By Andrew Binstock, July 20, 2011 Note:主要是自动翻译,俺做了小量修改 1 Comment The actor ...

  9. pwa js_如何在互联网信息亭中实现PWA和Barba.js

    pwa js by Nino Mihovilić 由NinoMihovilić 如何在互联网信息亭中实现PWA和Barba.js (How to Implement a PWA and Barba.j ...

最新文章

  1. grep 的特殊使用
  2. 清华本科生开发强化学习平台「天授」:千行代码实现,性能吊打国外成熟平台,刚刚开源...
  3. BZOJ3566 [SHOI2014]概率充电器 (树形DP概率DP)
  4. 信息系统项目管理知识--知识产权与标准化
  5. 纸的大小图解_图解常见纸张开数尺寸印前小常识
  6. 诺基亚收购了阿朗:那与 TCL 的“阿尔卡特”品牌授权协议到期后咱办?
  7. ubuntu软件源更换方法
  8. Py中reshape中的-1表示什么【转载】
  9. 宠物医院app开发的功能有哪些?
  10. Microsoft Internet Explorer浏览器包含最新版本的内置Adobe Flash Player的解决办法
  11. 关于嵌入式的bin、hex、axf、map
  12. 云平台、面向服务的体系结构和云编程
  13. 2022年,给物联网专业的大学生的一些建议!
  14. 上海私车牌价狂降3万余元!!!
  15. Riverbed’s Modeler Academic
  16. Java初学01:学习路线,springcloud视频下载
  17. 眼球追踪技术给各大科技巨头带来的四大应用前景
  18. 【K8S实战系列-nignx-2】k8s中configmap挂载配置nginx.conf
  19. 三相全桥整流 逆变 matlab,三相桥式有源逆变电路的MATLAB建模仿真
  20. Crowd Counting论文小结(持续更新)

热门文章

  1. 2016新疆教师计算机等级考试,2019年11月7日的新疆中小学教师计算机等级..._教师资格考试_帮考网...
  2. 匠心造就可靠,协同铸就未来
  3. 数字时钟与整点报时的问题 - C51
  4. 不规则现金流 java设计_第三节不规则现金流的计算
  5. 数据类型-浮点型(C语言)
  6. python进阶--pandas基本功能
  7. GPS北斗校时(NTP校时服务器)在某市国土资源局投入使用
  8. outlook自定义快捷键_如何将名片模板应用于联系人并在Outlook 2013中对其进行自定义...
  9. 【blender】动画导出方法
  10. 【LAS 】全球智能网络传输竞赛2018 : 基于DASH