当前位置: 首页 > news >正文

利用DeepSeeek改进Python实现AI数独:从基础算法到高级优化一文的测试代码

腾讯云作者 熊猫钓鱼写了一篇文章Python实现AI数独:从基础算法到高级优化。

将文中倒数第三个代码块中的class Sudoku部分保存为sudoku.py, 然后将最后一个性能评估代码块保存为evalsudoku.py,同时省略中间结果输出。

使用默认的题目个数10测试。

C:\d>python evalsudoku.py 评估easy难度... 评估medium难度... 评估hard难度... 评估expert难度... 性能评估结果(平均求解时间,单位:秒): ------------------------------------------------------------ 难度 | 回溯算法 | 优化算法 | 提升比例 ------------------------------------------------------------ easy | 0.000040 | 0.000015 | 62.14 % medium | 0.000063 | 0.000013 | 79.10 % hard | 0.000081 | 0.000012 | 85.44 % expert | 0.000118 | 0.000017 | 85.21 %

将测试题目个数扩大到100。

C:\d>python evalsudoku.py 评估easy难度... 评估medium难度... 评估hard难度... 评估expert难度... 性能评估结果(平均求解时间,单位:秒): ------------------------------------------------------------ 难度 | 回溯算法 | 优化算法 | 提升比例 ------------------------------------------------------------ easy | 0.000064 | 0.000005 | 91.64 % medium | 0.000053 | 0.000005 | 90.53 % hard | 0.000086 | 0.000005 | 93.96 % expert | 0.000085 | 0.000005 | 93.87 %

这个测试结果很可疑,任何难度优化算法的时间都相同,那就体现不出难度的区别了。
仔细观察计时部分的代码

foralgorithminalgorithms:# 创建求解器solver=Sudoku(puzzle)# 计时求解start_time=time.time()ifalgorithm=='backtracking':solver.solve_backtracking()else:# optimizedsolver.solve_optimized()end_time=time.time()solve_time=end_time-start_time

因为单次执行前后时间差距非常小,这么写的误差较大,应该用批量执行的总时间来计算,让deepseek修改,

将附件的函数改为先保存所有难度的全部num_puzzles个puzzle到puzzles列表。然后在测试某个难度时在批量测试开始时计时,所有num_puzzles个puzzle求解完毕才停止计时,计算总时长,最后用这个总时长来计算平均执行时间

他的输出如下

importtimeimportrandomfromsudokuimportSudokudefevaluate_performance(num_puzzles=100):difficulties=['easy','medium','hard','expert']algorithms=['backtracking','optimized']# 先保存所有谜题print("正在生成谜题...")all_puzzles={}fordifficultyindifficulties:puzzles=[]foriinrange(num_puzzles):generator=Sudoku()generator.generate(difficulty)puzzle=[row[:]forrowingenerator.board]puzzles.append(puzzle)all_puzzles[difficulty]=puzzlesprint(f"已生成{difficulty}难度谜题{num_puzzles}个")results={diff:{alg:0.0foralginalgorithms}fordiffindifficulties}fordifficultyindifficulties:print(f"\n评估{difficulty}难度...")puzzles=all_puzzles[difficulty]foralgorithminalgorithms:print(f" 测试{algorithm}算法...",end="",flush=True)# 批量计时开始start_time=time.time()# 求解所有谜题forpuzzleinpuzzles:solver=Sudoku(puzzle)ifalgorithm=='backtracking':solver.solve_backtracking()else:# optimizedsolver.solve_optimized()# 批量计时结束end_time=time.time()total_time=end_time-start_time results[difficulty][algorithm]=total_timeprint(f"完成,总时间:{total_time:.3f}秒")# 计算平均时间print("\n\n性能评估结果(平均求解时间,单位:秒):")print("-"*60)print(f"{'难度':<10}|{'回溯算法':<15}|{'优化算法':<15}|{'提升比例':<10}")print("-"*60)fordifficultyindifficulties:avg_backtracking=results[difficulty]['backtracking']/num_puzzles avg_optimized=results[difficulty]['optimized']/num_puzzlesifavg_backtracking>0:improvement=(avg_backtracking-avg_optimized)/avg_backtracking*100else:improvement=0.0print(f"{difficulty:<10}|{avg_backtracking:<15.6f}|{avg_optimized:<15.6f}|{improvement:<10.2f}%")if__name__=="__main__":evaluate_performance()

测试结果如下:

C:\d>python evalsudoku2.py 正在生成谜题... 已生成 easy 难度谜题 100 个 已生成 medium 难度谜题 100 个 已生成 hard 难度谜题 100 个 已生成 expert 难度谜题 100 个 评估easy难度... 测试backtracking算法...完成,总时间: 0.008秒 测试optimized算法...完成,总时间: 0.001秒 评估medium难度... 测试backtracking算法...完成,总时间: 0.006秒 测试optimized算法...完成,总时间: 0.001秒 评估hard难度... 测试backtracking算法...完成,总时间: 0.009秒 测试optimized算法...完成,总时间: 0.001秒 评估expert难度... 测试backtracking算法...完成,总时间: 0.011秒 测试optimized算法...完成,总时间: 0.001秒 性能评估结果(平均求解时间,单位:秒): ------------------------------------------------------------ 难度 | 回溯算法 | 优化算法 | 提升比例 ------------------------------------------------------------ easy | 0.000084 | 0.000009 | 89.36 % medium | 0.000057 | 0.000011 | 81.03 % hard | 0.000085 | 0.000013 | 84.55 % expert | 0.000111 | 0.000012 | 88.93 %

虽然差距较小,但不同难度还是有差距的。

http://www.jsqmd.com/news/176131/

相关文章:

  • 7个隐藏技巧让PS3游戏在电脑上流畅运行的终极指南
  • WebAssembly在线开发完全指南:WABT工具深度实战解析
  • SimpleGUI终极实战指南:从零构建单色屏GUI应用的完整解决方案
  • GaLore与Q-Galore优化器对比测评,低秩优化哪家强?
  • Apache Eagle:构建企业级大数据安全监控平台的5大核心优势
  • AB测试框架搭建:比较两个模型版本在真实用户中的偏好度
  • macOS开发环境跨版本兼容性实战指南
  • Reagent高级性能优化与自定义编译器配置实战
  • SSL Kill Switch 2:网络安全测试的终极利器
  • 老照片智能修复终极指南:5分钟快速上手AI修复技术
  • Navicat MySQL绿色版:免安装数据库管理神器,3分钟快速上手![特殊字符]
  • 法律AI终极部署指南:如何快速实现企业法务智能化转型
  • 【高效开发必备】:VSCode智能体组织级配置的8个关键步骤
  • Anycubic i3 MEGA 3D打印机Marlin固件完整配置指南
  • 如何安全编辑敏感配置文件?,VSCode权限控制与审计全解析
  • 终极指南:5分钟快速上手Qwen3-Next-80B大模型
  • Anycubic i3 MEGA 固件升级终极指南
  • Nova开源视频播放器:为什么它成为Android设备的最佳选择?[特殊字符]
  • 3步搞定CoDeF视频预处理:从图像算法到时间一致性的完美跨越
  • 从 51 单片机,到今天的国产 MCU:8 位真的过时了吗?
  • 终极攻略:用bilidown轻松下载B站超清视频
  • Ghostwriter主题引擎深度解析:从原理到实战的完整指南
  • conform.nvim终极指南:构建高效的插件协同格式化系统
  • YOLOv8模型上传HuggingFace Model Hub操作指南
  • 联邦学习保护数据隐私的新架构
  • Neo4j图数据库:7天从零构建企业级关系数据解决方案
  • OpenVoice语音克隆终极指南:从原理到实战完整教程
  • 二极管失效模式在整流电路中的分析
  • 官方文档导航:快速找到API参考与示例代码
  • DynamicTp动态线程池:重新定义Java并发编程新标准