100元随机分给10个人 最多20 最少0.01

# encoding:utf-8
import random
"将问题分解成两步:先生成10个随机红包,再随机发给10个人的问题。这样算法就集中在第一步上。"
"每生成一个红包,计算剩余金额给剩下的人发,最多能发多少,如果大于12以12算,最少能发多少;如果小于6以6计算。生成一个最大于最小之间的随机数。最后一个人的红包则是总额的余额。"
# random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限
def share_money(total, count, max_money, min_money):
    array = []
    total_rest = total
    for i in range(1, count):
#    如果剩下的都是最小值,则此次随机最大的数
        new_max = min(total_rest - (count - i) * min_money, max_money)
#    如果剩下的都是最大值,则此次随机最小的数
new_min = max(total_rest - (count - i) * max_money, min_money)
#    我们每次产生的数介于这两个数之间
money = round(random.uniform(new_min, new_max), 2) total_rest -= money array.append(money) array.append(round(total_rest,2)) print(array)if __name__ == '__main__': share_money(100,10,20,0.01)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用MATLAB遗传算法实现将100项任务分给18个人,使总工作时间最短的代码示例: ```matlab % 任务分配问题的遗传算法实现 % 定义任务数量和人员数量 num_tasks = 100; num_people = 18; % 定义个体长度和种群大小 chrom_length = num_tasks; pop_size = 100; % 定义遗传算法参数 pc = 0.8; % 交叉概率 pm = 0.01; % 变异概率 max_gen = 100; % 最大迭代次数 % 定义任务分配矩阵,初始随机生成 pop = randi([0,1], pop_size, chrom_length); % 定义适应度函数 fitness_func = @(x) 1/total_time(x, num_people); % 迭代优化过程 for i = 1:max_gen % 计算每个个体的适应度值 fitness = zeros(pop_size, 1); for j = 1:pop_size fitness(j) = fitness_func(pop(j,:)); end % 选择操作 [~, idx] = sort(fitness, 'descend'); elite = pop(idx(1:2), :); new_pop = zeros(pop_size, chrom_length); for j = 1:pop_size-2 p1 = pop(randi([1, pop_size]), :); p2 = pop(randi([1, pop_size]), :); new_pop(j,:) = crossover(p1, p2, pc); new_pop(j,:) = mutation(new_pop(j,:), pm); end pop = [elite; new_pop]; end % 打印最优解和最短的总工作时间 [~, idx] = max(fitness); best_solution = pop(idx,:); best_time = total_time(best_solution, num_people); disp(['最短的总工作时间为:', num2str(best_time)]); % 定义计算总工作时间的函数 function t = total_time(chrom, num_people) task_time = randi([1, 10], 1, size(chrom, 2)); people_time = zeros(1, num_people); for i = 1:size(chrom, 2) idx = find(chrom(:,i)); if ~isempty(idx) people_time(idx(1)) = people_time(idx(1)) + task_time(i); end end t = sum(people_time); end % 定义交叉操作函数 function child = crossover(p1, p2, pc) child = p1; if rand() < pc pos = randi([1, length(p1)]); child(pos:end) = p2(pos:end); end end % 定义变异操作函数 function mut_chrom = mutation(chrom, pm) mut_chrom = chrom; if rand() < pm pos = randi([1, length(chrom)]); mut_chrom(pos) = 1 - chrom(pos); end end ``` 在这个示例中,我们使用随机数生成了每个任务的时间,并根据遗传算法中的操作进行了优化。最后输出了最优解和最短的总工作时间。需要注意的是,由于遗传算法是一种随机算法,每次运行可能得到不同的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值