【数据结构与算法】 FIND!流程图绘制工具

老师推荐了Visio,确实相比Word\PPT 画流程图,Visio有许多独特的优点。

例如:

visio的画板可也以无限扩大,你超出了原来的范围,它就自动扩展。

可以自动对齐!!!

……


又发现了一个很不错的在线画图工具(觉得是个不错的收获):云存储+HTML5下的ProcessOn.com

http://processon.com/


以及,draw.io,网页版跨平台无需安装,功能强大超出想像,免费,数据保存在云端。       

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一份 MATLAB 代码,可以使用遗传模拟退火算法对流水车间调度进行甘特图绘制。请注意,这只是一个简单的流程,具体的实现可能需要更多的细节处理。 ```matlab % 流水车间调度问题 % 任务数量和机器数量 n = 4; m = 3; % 任务处理时间 p = [3, 1, 3, 2; 2, 3, 1, 1; 1, 2, 2, 2]; % 定义甘特图数据结构 % tasks(i,j) 表示第i个任务在第j台机器上的开始时间 tasks = zeros(n, m); % 使用遗传算法生成初始解 popSize = 100; numGen = 500; mutationRate = 0.01; eliteRate = 0.1; % 初始化种群 pop = zeros(popSize, n*m); for i = 1:popSize pop(i,:) = randperm(n*m); end % 进化主循环 for t = 1:numGen % 计算适应度 fitness = zeros(popSize, 1); for i = 1:popSize % 将染色体解码为任务分配 assign = reshape(pop(i,:), n, m); % 计算每个任务在每个机器上的完成时间 times = zeros(n, m); for j = 1:m if j == 1 times(:,j) = assign(:,j); else times(:,j) = max(times(:,j-1) + p(:,assign(:,j-1)), assign(:,j)); end end % 计算完成时间 completionTime = max(times(:,m) + p(:,assign(:,m))); % 计算适应度(完成时间越小越好) fitness(i) = 1 / completionTime; end % 选择精英个体 eliteSize = round(popSize * eliteRate); [~, idx] = sort(fitness, 'descend'); elite = pop(idx(1:eliteSize), :); % 选择父代染色体 parents = zeros(popSize - eliteSize, n*m); for i = 1:popSize - eliteSize % 随机选择两个个体 idx1 = randi(popSize); idx2 = randi(popSize); % 选择适应度更高的个体作为父代 if fitness(idx1) > fitness(idx2) parents(i,:) = pop(idx1,:); else parents(i,:) = pop(idx2,:); end end % 交叉操作 crossoverRate = 0.7; for i = 1:2:popSize-eliteSize-1 if rand() < crossoverRate % 选择交叉点 crossIdx = randi(n*m-1); % 交叉操作 temp1 = parents(i, 1:crossIdx); temp2 = parents(i+1, 1:crossIdx); parents(i, 1:crossIdx) = temp2; parents(i+1, 1:crossIdx) = temp1; end end % 变异操作 for i = 1:popSize-eliteSize if rand() < mutationRate % 选择变异点 mutIdx = randi(n*m); % 变异操作 temp = parents(i, mutIdx); parents(i, mutIdx) = parents(i, n*m-mutIdx+1); parents(i, n*m-mutIdx+1) = temp; end end % 合并精英个体和新生成的个体 pop = [elite; parents]; end % 选出最优解 bestIdx = find(fitness == max(fitness)); bestAssign = reshape(pop(bestIdx,:), n, m); % 计算每个任务在每个机器上的完成时间 times = zeros(n, m); for j = 1:m if j == 1 times(:,j) = bestAssign(:,j); else times(:,j) = max(times(:,j-1) + p(:,bestAssign(:,j-1)), bestAssign(:,j)); end end % 绘制甘特图 figure; for i = 1:n for j = 1:m x1 = times(i,j) - p(i,bestAssign(i,j)); x2 = times(i,j); y1 = i - 0.4; y2 = i + 0.4; patch([x1 x2 x2 x1], [y1 y1 y2 y2], 'b'); hold on; plot([x1 x2], [i i], 'k'); end end xlabel('Time'); ylabel('Task'); ylim([0.5 n+0.5]); xlim([0 max(times(:,m)+p(:,bestAssign(:,m)))]); ``` 这份代码使用遗传算法生成初始解,并使用模拟退火算法进行优化。最终,它将生成最优的任务分配和机器调度,并绘制甘特图以可视化结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值