mmc排列组合问题

本文探讨了在特定游戏场景下,如何通过算法优化10人组队为两组进行不同等级怪兽的战斗,以及9人组队为三组进行大、中、小怪兽的战斗策略。通过使用Flatten函数结合Table、Subsets和Permutations实现队伍的灵活组合,确保资源高效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10个人选8个人,组队打怪,一组打大鬼,一组打小鬼:

没有出战顺序

Flatten[Table[{#,i},{i,Subsets[Complement[Range[10],#],{4}]}]&/@Subsets[Range[10],{4}],1]

有出战顺序

Flatten[Table[{#,i},{i,Permutations[Complement[Range[10],#],{4}]}]&/@Permutations[Range[10],{4}],1]

 

9个选6个,2人一组,打大鬼,中鬼,小鬼

Flatten[Tuples@{{#[[1]]},{#[[2]]},Subsets[Complement[Range[9],Flatten@#],{2}]}&/@Tuples@{{#},Subsets[Complement[Range[9],#],{2}]}&/@Subsets[Range[9],{2}],2]//Length

 

``` from ase.io import read from ase.io import write from ase.build import make_supercell import random #构建不同结构 输入、矩阵、输出 列表 structure_configs={ #六方 P63 mmc "hexagonal":{ "input_file":"C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P63 mmc.cif", "scaling_matrix":[[2,1,0],[0,3,0],[0,0,2]], "output_file":"C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc.cif" }, #面心立方 Fm-3m "fcc":{ "input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Fm-3m.cif", "scaling_matrix": [[1, 1, 1], [1, 1, -2], [1, -1, 0]], "output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Fm-3m.cif" }, #体心立方 Im-3m "bcc":{ "input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Im-3m.cif", "scaling_matrix": [[1, 1, 1], [1, 1, -2], [2, -2, 0]], "output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Im-3m.cif" }, #六方密堆 P6 mmm "omiga":{ "input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P6 mmm.cif", "scaling_matrix": [[2, 1, 0], [0, 2, 0], [0, 0, 3]], "output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P6 mmm.cif" }, #正交 Cmcm "orthogonality":{ "input_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Cmcm.cif", "scaling_matrix": [[2, 0, 0], [0, 2, 0], [0, 0, 2]], "output_file": "C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_Cmcm.cif" }, } #超胞矩阵计算 #统一处理所有结构 for config_name, config in structure_configs.items(): ti_structure = read(config["input_file"]) supercell = make_supercell(ti_structure,config["scaling_matrix"]) #储存超胞到不同变量 globals()[f"{config_name}_supercell"] = supercell #储存为全局变量 #保存文件 write(config["output_file"],supercell) print(f"{config_name}结构处理完成,已保存至:{config['output_file']}") #f? # 读取六方的Ti的CIF文件 #ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P63 mmc.cif") # 构建超胞(根据需求调整缩放矩阵) #scaling_matrix = [[2,1,0],[0,3,0],[0,0,2]] #supercell = make_supercell(ti_structure,scaling_matrix) # 读取Fcc的Ti的CIF文件 #ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Fm-3m.cif") # 构建超胞(根据需求调整缩放矩阵) #scaling_matrix = [[1,1,1],[1,1,-2],[1,-1,0]] #supercell = make_supercell(ti_structure,scaling_matrix) # 读取Bcc的Ti的CIF文件 #ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_Im-3m.cif") # 构建超胞(根据需求调整缩放矩阵) #scaling_matrix = [[1,1,1],[1,1,-2],[2,-2,0]] #supercell = make_supercell(ti_structure,scaling_matrix) #Cmcm 2*2*2 #读取omiga的Ti的CIF文件 #ti_structure = read("C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/Ti_P6 mmm.cif") # 构建超胞(根据需求调整缩放矩阵) 变长方形 a变成根号3a 面积扩一倍 #scaling_matrix = [[2,1,0],[0,2,0],[0,0,3]] #supercell = make_supercell(ti_structure,scaling_matrix) #设置替换参数 # 10%的Ti被替换成Nb substitution_ratio = 0.6 ti_sites = [i for i, site in enumerate(supercell) if site.symbol == "Ti"] num_substitutions = int(len(ti_sites) * substitution_ratio) #随机选择替换位点 random.seed() #确保可重复性 自动使用系统时间作为种子 replace_indices = random.sample(ti_sites, num_substitutions) #添加原子索引输出验证 print("本次替换原子索引:",sorted(replace_indices)) #执行原子替换 for idx in replace_indices: supercell[idx].symbol="Nb" #直接替换原子类型 #保存新结构 #write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_P63 mmc_0.6_1.cif',supercell) #write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_Fm-3m_0.6_1.cif',supercell) #write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_Im-3m_0.6_1.cif',supercell) write('C:/Users/心心心/Desktop/毕设资料/模拟/TiNb_CIF/TiNb_P63 mmc/TiNb_P6 mmc_0.6_1.cif',supercell)```我现在的代码有一些混乱,总的目的是想将这五种结构的钛晶体中的钛随机的替换成铌,形成钛铌固溶体并输出CIF格式以及LAMMPS文件。在随机替换这一步骤中,删去我现有代码中的random ratio等函数,因为按浓度分类替换不是很随机,改用shuffle函数,因为我会给出每个结构的钛原子数,希望建一个列表,用shuffle函数把铌随机替换成Ti,生成所有随机可能性,然后填到列表里。
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值