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

【人工智能】—约束传播、弧约束、问题结果与问题分解、局部搜索CSP

【人工智能】—约束传播、弧约束、问题结果与问题分解、局部搜索CSP

  • 约束传播
  • 弧约束
    • 弧相容算法AC-3
  • 问题结构
    • 化简约束图-树结构
  • CSP问题的局部搜索
    • CSP的迭代算法
    • 举例:4-Queens
      • 加速:模拟退火法
      • 加速:最小最大优化(约束加权法)
  • 小结

约束传播

  • 前向检验将信息从已分配的变量传播到未分配的变量,但不能为所有失败情景提供早期检测:在这里插入图片描述NT和SA不能都是蓝色的!
  • 约束传播在局部重复强制执行约束

弧约束

在这里插入图片描述

  • 能使每个弧相容的最简单形式:
    • X→Y是可相容的,当:

      • 对于X的每个值x,Y都存在不与之冲突的取值y在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    • 如果X丢失了一个值,则需要重新检查X的邻居

    • 弧相容比前向检验更早检测到可能失败的情景

    • 弧相容可以作为预处理运行,也可以在每次分配后运行

弧相容算法AC-3

在这里插入图片描述

  • 时间复杂度:O(n2d3)O(n^2d^3)O(n2d3)在这里插入图片描述

问题结构

  • T和其它地区是独立的子问题,独立性可以简单地通过在约束图中寻找连通子图来确定。每个连通子图对应于一个子问题CSP
    在这里插入图片描述

  • 假设每个子问题有n个变量中的c个。最坏情况下的解决方案成本是n/c⋅dcn/c·d^cn/cdc,对n是线性的在这里插入图片描述

  • 例如,n=80,d=2,c=20n=80,d=2,c=20n=80d=2,c=20

    • 280=402^{80}=40280=40亿年,1000万个节点/秒
    • 4⋅220=0.44·2^{20}=0.44220=0.4秒,1000万个节点/秒
  • 任何一个树状结构的CSP问题可以在变量个数的线性时间内求解;在这里插入图片描述在这里插入图片描述

    如果约束图没有循环,CSP可以在O(n⋅d2)O(n·d^2)O(nd2)时间内解决
    与一般CSP相比,最坏情况下的时间是O(dn)O(d^n)O(dn)
    在这里插入图片描述

化简约束图-树结构

在这里插入图片描述
在这里插入图片描述

CSP问题的局部搜索

CSP的迭代算法

  • 爬坡法、模拟退火法通常对 "完整 "状态进行工作,即所有变量均被分配在这里插入图片描述
  • 为了适用于CSP:
    • 允许有未满足的约束条件的状态
    • 操作者重新分配变量值
  • 变量选择:随机选择任何有冲突的变量
  • 通过最小冲突进行价值选择 启发式
    • 选择会造成与其它变量的冲突最小的值
    • 在爬山法中,h(n)=被违反的约束总数

举例:4-Queens

  • 状态: 4个皇后在4列(44=256个状态)
  • 行动:在列中移动皇后
  • 目标测试:没有冲突
  • 评价:h(n)=冲突次数
    在这里插入图片描述
  • 最小冲突启发式的性能
    • 给定随机初始状态,可以在几乎恒定的时间内解决任意n的高概率问题(如n=10,000,000)的n-queens。
    • 对于任何随机生成的CSP来说,除了在一个狭窄的比率范围内,似乎也是如此。在这里插入图片描述
  • 在3-SAT问题中也能取得很好的性能:在这里插入图片描述

加速:模拟退火法

  • 思路:通过允许一些 "坏 "的动作来逃避局部最大值,但要逐渐减少其频率在这里插入图片描述

加速:最小最大优化(约束加权法)

  • 在这里插入图片描述在这里插入图片描述

小结

在这里插入图片描述

http://www.lryc.cn/news/45590.html

相关文章:

  • Java设计模式面试专题
  • 文件(下)——“C”
  • bugku 渗透靶场3
  • NER 任务以及联合提槽任务
  • scala函数式编程
  • 网吧2023:热闹回来了,电竞战歌起
  • 代码随想录算法训练营第五十九天|503.下一个更大元素II、42. 接雨水
  • 9、简单功能分析
  • 如何发送和接收参数?五种参数传递方法
  • 蓝桥杯C/C++VIP试题每日一练之矩形面积交
  • Spark大数据处理讲课笔记2.4 IDEA开发词频统计项目
  • 【ChatGPT 】国内无需注册 openai 即可访问 ChatGPT:ChatGPT Sidebar 浏览器扩展程序的安装与使用
  • 使用fetch()异步请求API数据实现汇率转换器
  • GPT-4“王炸”,10秒钟开发一套Web + APP 系统
  • Disjoint 集合数据结构或 Union-Find 算法简介
  • uniapp中nvue与vue的区别?
  • 带头双向循环链表的实现
  • 大屏使用dv-digital-flop定时刷新显示总人数
  • Java面向对象部分 个人学习记录
  • MySQL数据库——对Linux MySQL软件包的一些说明
  • 【JavaEE进阶】——第二节.Spring核心和设计思想
  • twitter开源算法(1)For You推荐系统架构
  • A General Framework for Uncertainty Estimation in Deep Learning源码阅读(二)
  • 串行通信协议---HART协议
  • 【独家】华为OD机试 - 寻找密码(C 语言解题)
  • FPGA有哪些优质的带源码的IP开源网站?
  • 基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)
  • Postman接口测试之Mock快速入门
  • 分享一个国内可用的免费ChatGPT网站
  • 15. 三数之和(Java)