工作上一直有一个很不顺心的问题,原因和一款软件有关
这款软件的输出结果是随机的,而既然随机的就有很多时候不利于自己
我想实现的方法就是对程序进行暗改,把里面添加一个检测字段的功能,然后把随机数的生成机制改一下
这个程序当中有这么一段话:
就是生成四个随机数,还有这么一段话:
所以我大概明白了,这个排序功能就是生成四个随机数,然后比较随机数的大小,对worker进行调换,达到随机排序的目的
我把这个代码换成了下面的样子:
虽然笨拙,但是有用,哈哈哈
中间有一个是否大于50的排定,就是让他以50%的概率变得很大,50%的概率变得很小
另外,为什么是57这个设定,是我根据蒙特卡洛方法算出来的,源码贴在下面
a1=0;
a2=0;
a3=0;
a4=0;
for i=1:10000000
e=rand;
if e>0.5
a=rand*100+57;
else
a=rand*100-57;
end
b=rand*100;
c=rand*100;
d=rand*100;
if a>b && a>c && a>d
a1=a1+1;
end
if a>b && a>c && a<d || a>b && a<c && a>d || a<b && a>c && a>d
a2=a2+1;
end
if a>b && a<c && a<d || a<b && a<c && a>d || a<b && a>c && a<d
a3=a3+1;
end
if a<b && a<c && a<d
a4=a4+1;
end
end
这个代码是MATLAB,不知道为啥csdn的代码风格设置里没有MATLAB
这是四个人的代码,当然还有三个人的:
a1=0;
a2=0;
a3=0;
for i=1:10000000
e=rand;
if e>0.5
a=rand*100+43;
else
a=rand*100-43;
end
b=rand*100;
c=rand*100;
if a>b && a>c
a1=a1+1;
end
if a>b && a<c || a<b && a>c
a2=a2+1;
end
if a<b && a<c
a3=a3+1;
end
end
可以看到,在这里三个人的版本改成了43,蒙特卡罗方法真的很棒啊,拯救了我的概率论学渣
好了,下面就是对程序进行修改了
这个程序是用QT和VS进行联合编译的,由于我本人只学过在VC6.0上面编程c++,对于qt和vs基本一窍不通,所以把我的探索经历写在下面:
运行exe文件(我手里有exe 和源码),弹出这个错误
似乎是运行环境没有配置好。
然后,我看到,在sln文件里面有一个这个:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
果断下载VS2010装起来,看来原作者是用了VS2010进行的编译
问题还是没有解决,还是不知道原作者用了哪个版本的QT进行编译
还是得先解决QT安装的问题,不然没有办法编译和调试这个程序
装了一个QT5.8.0 然后vs2010里面没有出现qt的选项卡或者菜单
后来查了一下,还需要装一个QT add in插件
好吧,查了一下,发现支持2010得插件,1.1.11可以做到
安装起来之后,再次打开2010,发现2010里面有这个选项卡了:
但是还是不行,QT option里面没有我安装的5.8.0版本的qt,说明没有自动检测成功
但是添加路径也不行,看来我安装的QT5.8.0不是一个支持2010的QT
网上找了一下,发现QT5.3.2可以用,也有对应的安装教程,好的,就是你了
安装之后,发现还是不支持,觉得可能是add in版本不对,所以下载了一个新版add in,1.2.3版本
安装之后就可以了,成功添加了路径
主要的步骤就是跟着这个走:https://www.cnblogs.com/liuguoyao514257665/articles/9344730.html
设置环境变量的看这个:https://jingyan.baidu.com/article/922554467f8f39851648f4a5.html
另外也可以参考这个:https://jingyan.baidu.com/article/37bce2be452d991003f3a247.html
然后好像配置环境就成功了
一开始用vs2010打开这个程序的sln文件,会提示程序已经过期啥的,配置好环境就没有了
另外还有一个问题就是,sln文件里面明明是:
可是在vcxproj
而且,右键点击项目,选中convert project to Qt Add-in project,这时候编译运行,也不会出现“error MSB6006: “cmd.exe”已退出,代码为 3”这样的错误了
可是出现了一些其他的错误:
今天写到这吧。。。后面陆续补充