2024.8-至今 澳門理工大學(xué) 大數(shù)據(jù)與物聯(lián)網(wǎng)
ID:000368受到aistudio百度飛槳的啟發(fā),可以將平臺(tái)改造成一個(gè)可以在線運(yùn)行代碼的平臺(tái),其實(shí)可以學(xué)習(xí)anaconda的這樣的一種運(yùn)行模式。按照數(shù)學(xué)建模國(guó)賽,美賽,研賽以及華中杯這樣的比賽分賽題進(jìn)行開源。不過,一般編程這塊個(gè)人還是喜歡兩個(gè)都用,我指北太和python。北太不是可以在線運(yùn)行代碼嗎?
因?yàn)槿斯ぶ悄鼙荣惡蛿?shù)學(xué)建模競(jìng)賽有一個(gè)區(qū)別就是,有的時(shí)候需要手動(dòng)處理數(shù)據(jù),也就是說(shuō)baseline的數(shù)據(jù)是企業(yè)寫好的,但是數(shù)模競(jìng)賽的數(shù)據(jù)是沒有處理好的,需要我們動(dòng)手劃分?jǐn)?shù)據(jù)集。這個(gè)對(duì)于新入門的學(xué)生來(lái)說(shuō)是一個(gè)坎。
數(shù)學(xué)建模競(jìng)賽思路五花八門,可以開辟競(jìng)賽討論,曬自己的代碼和思路實(shí)現(xiàn)思路,掛載數(shù)據(jù)集,然后搞一個(gè)類似markdown的東西出來(lái),這樣就可以做成北太的開源社區(qū)了。
看看國(guó)產(chǎn)求解器,比如杉數(shù)求解器,給優(yōu)化領(lǐng)域的學(xué)者開辟專場(chǎng)。
聯(lián)系課本,我覺得這塊可以看看類似高等代數(shù),統(tǒng)計(jì)學(xué)這樣的,看看北太在實(shí)現(xiàn)統(tǒng)計(jì)學(xué)方法的時(shí)候,是python好用還是北太好用。
還是要聯(lián)合學(xué)生一起去研究這塊,就是提升工科生的數(shù)學(xué)建模思維,現(xiàn)在幾乎是ai+運(yùn)籌,目前使用matlab學(xué)者居多,看看北太有沒有更好的功能。不知道啥時(shí)仿真實(shí)力可以上線。
箱型圖 文字沒有實(shí)現(xiàn)
條形圖
目前團(tuán)隊(duì)使用的問題已經(jīng)反饋了,目前普遍的情況和測(cè)試北太的方法是,我會(huì)找一段matlab的代碼先寫一遍,然后刻意去用北太跑一下,然后去看報(bào)錯(cuò)。這個(gè)目前高校給數(shù)學(xué)和統(tǒng)計(jì)專業(yè)開設(shè)的編程課程,matlab還是居多的。至少我們學(xué)校是這樣的。
% 北大數(shù)學(xué)揭秘劉謙魔術(shù), 它實(shí)際上是約瑟夫(josephus)問題的一個(gè)特例
% 北太天元給出一般的約瑟夫問題的求解
% 例如
% 男生對(duì)應(yīng)的是 josephus(7,2), 目標(biāo)牌在第7個(gè),因此
% josephus(7,2) 看到退出的牌的次序是 2 4 6 1 5 3 7 ,
% 恰好最后一張牌是 7
% 男生對(duì)應(yīng)的是 josephus(6,2) , 目標(biāo)牌在第五個(gè)
% 女生對(duì)應(yīng)的是 josephus(5,2) , 目標(biāo)牌X 在第三個(gè)
function result = josephus(n, m)
if(nargin <2)
n = 7;
m =2;
end
if n < 1 || m < 1
result = [];
return;
end
% 創(chuàng)建一個(gè)1到n的向量表示圍成一圈的人
people = 1:n; % 編號(hào)從0到n-1
result = []; % 用于存儲(chǔ)每次出圈人的順序
index = 1; % 從第一個(gè)人開始報(bào)數(shù)
while ~isempty(people) % 當(dāng)還有人在圈中時(shí)
% 計(jì)算要移除的人的索引位置(考慮循環(huán)計(jì)數(shù)的特性)
index = mod(index - 1 + m, length(people));
if(index == 0)
index = length(people);
end
% 將出圈的人添加到結(jié)果中,并從圈中移除
result = [result, people(index)];
people(index) = [];
end
end
聲明:當(dāng)年跟老師一塊弄的。
function result = magic_trick(input_string)
% 將輸入字符串轉(zhuǎn)換為字符數(shù)組
elements = char(input_string);
% 隨機(jī)打亂順序
permutation = elements;
permutation = permutation(randperm(length(permutation)));
fprintf('初始排列: %s\n', permutation);
% 定義通用交換函數(shù)
function perm = swap(perm, index, direction)
if strcmp(direction, 'left') && index > 1
perm([index-1, index]) = perm([index, index-1]);
elseif strcmp(direction, 'right') && index < length(perm)
perm([index+1, index]) = perm([index, index+1]);
end
end
% 執(zhí)行動(dòng)作
for i = 1:length(permutation)
if permutation(i) == 'A'
permutation = swap(permutation, i, 'left');
elseif permutation(i) == 'B'
permutation = swap(permutation, i, 'right');
elseif permutation(i) == 'C'
permutation = swap(permutation, i, 'left');
end
fprintf('執(zhí)行動(dòng)作后排列: %s\n', permutation);
end
% 檢查最右邊的元素是否為B
right_check = permutation(end) == 'B';
if right_check
result = true;
fprintf('成功!最右邊的元素是B。\n');
else
result = false;
fprintf('失??!最右邊的元素不是B。\n');
end
end
% main_script.m
result = magic_trick("ABC");
fprintf('最終結(jié)果: %d\n', result);
%這個(gè)是magic_trick.m代碼
% main_script.m
% 定義測(cè)試次數(shù)
num_tests = 10000;
success_count = 0;
for i = 1:num_tests
result = magic_trick("ABC");
if result
success_count = success_count + 1;
end
end
fprintf('經(jīng)過 %d 次測(cè)試,成功 %d 次。\n', num_tests, success_count);
fprintf('成功率: %.2f%%\n', (success_count / num_tests) * 100);