2024.8-至今 澳门理工大学 大数据与物联网
受到aistudio百度飞桨的启发,可以将平台改造成一个可以在线运行代码的平台,其实可以学习anaconda的这样的一种运行模式。按照数学建模国赛,美赛,研赛以及华中杯这样的比赛分赛题进行开源。不过,一般编程这块个人还是喜欢两个都用,我指北太和python。北太不是可以在线运行代码吗?
因为人工智能比赛和数学建模竞赛有一个区别就是,有的时候需要手动处理数据,也就是说baseline的数据是企业写好的,但是数模竞赛的数据是没有处理好的,需要我们动手划分数据集。这个对于新入门的学生来说是一个坎。
数学建模竞赛思路五花八门,可以开辟竞赛讨论,晒自己的代码和思路实现思路,挂载数据集,然后搞一个类似markdown的东西出来,这样就可以做成北太的开源社区了。
看看国产求解器,比如杉数求解器,给优化领域的学者开辟专场。
联系课本,我觉得这块可以看看类似高等代数,统计学这样的,看看北太在实现统计学方法的时候,是python好用还是北太好用。
还是要联合学生一起去研究这块,就是提升工科生的数学建模思维,现在几乎是ai+运筹,目前使用matlab学者居多,看看北太有没有更好的功能。不知道啥时仿真实力可以上线。
箱型图 文字没有实现
条形图
目前团队使用的问题已经反馈了,目前普遍的情况和测试北太的方法是,我会找一段matlab的代码先写一遍,然后刻意去用北太跑一下,然后去看报错。这个目前高校给数学和统计专业开设的编程课程,matlab还是居多的。至少我们学校是这样的。
% 北大数学揭秘刘谦魔术, 它实际上是约瑟夫(josephus)问题的一个特例
% 北太天元给出一般的约瑟夫问题的求解
% 例如
% 男生对应的是 josephus(7,2), 目标牌在第7个,因此
% josephus(7,2) 看到退出的牌的次序是 2 4 6 1 5 3 7 ,
% 恰好最后一张牌是 7
% 男生对应的是 josephus(6,2) , 目标牌在第五个
% 女生对应的是 josephus(5,2) , 目标牌X 在第三个
function result = josephus(n, m)
if(nargin <2)
n = 7;
m =2;
end
if n < 1 || m < 1
result = [];
return;
end
% 创建一个1到n的向量表示围成一圈的人
people = 1:n; % 编号从0到n-1
result = []; % 用于存储每次出圈人的顺序
index = 1; % 从第一个人开始报数
while ~isempty(people) % 当还有人在圈中时
% 计算要移除的人的索引位置(考虑循环计数的特性)
index = mod(index - 1 + m, length(people));
if(index == 0)
index = length(people);
end
% 将出圈的人添加到结果中,并从圈中移除
result = [result, people(index)];
people(index) = [];
end
end
声明:当年跟老师一块弄的。
function result = magic_trick(input_string)
% 将输入字符串转换为字符数组
elements = char(input_string);
% 随机打乱顺序
permutation = elements;
permutation = permutation(randperm(length(permutation)));
fprintf('初始排列: %s\n', permutation);
% 定义通用交换函数
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
% 执行动作
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('执行动作后排列: %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('最终结果: %d\n', result);
%这个是magic_trick.m代码
% main_script.m
% 定义测试次数
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('经过 %d 次测试,成功 %d 次。\n', num_tests, success_count);
fprintf('成功率: %.2f%%\n', (success_count / num_tests) * 100);