工作上一直有一個很不順心的問題,原因和一款軟件有關
這款軟件的輸出結果是隨機的,而既然隨機的就有很多時候不利於自己
我想實現的方法就是對程序進行暗改,把裏面添加一個檢測字段的功能,然後把隨機數的生成機制改一下
這個程序當中有這麼一段話:
就是生成四個隨機數,還有這麼一段話:
所以我大概明白了,這個排序功能就是生成四個隨機數,然後比較隨機數的大小,對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”這樣的錯誤了
可是出現了一些其他的錯誤:
今天寫到這吧。。。後面陸續補充