本章属于本书的开篇,有两个不便于理解的地方一是讲述的概念过于抽象,且本书的例子有点老套,所以本人以自动驾驶为例来理解本章的概念。二是本文的伪代码不太好看懂,于是改为c伪代码
智能体(intelligent agent):可以感知其环境,自主行动以实现目标,并可以通过学习提高其性能或使用知识的事物
智能体通过感知器(sensors)来感知环境,这可能包括摄像头、麦克风、红外线传感器,或者从数据库或网络获取的数据等。智能体通过执行器(actuators)来影响环境,这可能包括马达、扬声器,或者向数据库或网络发送数据等。
环境是智能体所在的上下文,智能体通过与环境交互来实现其目标。环境可以是物理世界,也可以是一个虚拟的世界,如一个计算机游戏或一个网络环境。环境为智能体提供了感知的来源,并接受智能体的行动。
以自动驾驶汽车为例
智能体是自动驾驶系统。它的目标可能是将乘客安全、准时地送达目的地。为了实现这个目标,它需要感知并理解其周围的环境,并做出适当的决策和行动。
自动驾驶系统通过各种感知器来感知环境,这可能包括摄像头(用于识别道路、行人、其他车辆等)、雷达和激光雷达(用于测量物体的距离和速度)、GPS(用于确定车辆的位置),以及各种车载传感器(用于测量车辆的速度、方向、燃油消耗等)。自动驾驶系统通过执行器来影响环境,这可能包括控制汽车的转向、加速、刹车等。
环境是自动驾驶汽车所在的道路和周围的世界。环境为自动驾驶系统提供了感知的来源,并接受其行动。环境包括了其他的车辆、行人、道路、交通信号、天气条件等。
对每一个可能的感知序列,根据已知的感知序列提供的证据和Agent具有的先验知识,理性Agent应该选择能使其性能度量最大化的动作,理性Agent是相对的
以自动驾驶汽车为例
在人工智能中,PEAS代表了“性能度量(Performance Measure)”,“环境(Environment)”,“执行器(Actuators)”,“传感器(Sensors)”。这是一个用来描述智能系统的框架。
以自动驾驶汽车为例
人工智能系统 | 性能度量 | 环境 | 执行器 | 传感器 |
---|---|---|---|---|
自动驾驶汽车 | 安全性,效率,法规遵守 | 道路,其他车辆,行人,交通信号 | 方向盘,油门,刹车 | 摄像头,雷达,激光雷达 |
股票交易机器人 | 利润,风险控制 | 股市,经济新闻,公司财报 | 买卖命令 | 市场数据,新闻,财报 |
自动扫地机器人 | 清洁效率,电池使用效率 | 家庭环境,障碍物 | 马达,吸尘器 | 摄像头,红外线传感器,碰撞传感器 |
机器人手臂 | 精确度,速度,安全性 | 工作台,工件,其他设备 | 电机,抓取器 | 摄像头,触摸传感器,距离传感器 |
推荐系统 | 用户满意度,点击率,购买率 | 用户数据,商品数据 | 显示推荐商品 | 用户行为数据,商品点击数据 |
环境性质 | 描述 | 例子 |
---|---|---|
完全可观察 vs 部分可观察 | 完全可观察的环境是指Agent可以获取环境的所有信息,而部分可观察的环境是指Agent只能获取环境的部分信息。 | 完全可观察:棋类游戏,部分可观察:扑克牌游戏 |
单Agent vs 多Agent | 单Agent环境是指只有一个Agent在进行决策,而多Agent环境是指有多个Agent同时进行决策。 | 单Agent:一个自动驾驶汽车在空旷道路上行驶,多Agent:多个自动驾驶汽车在同一条道路上行驶 |
确定的 vs 随机的 | 确定的环境是指在给定状态和行动下,下一个状态是确定的,而随机的环境是指在给定状态和行动下,下一个状态是随机的。 | 确定的:棋类游戏,随机的:股市 |
片段式的 vs 延续式的 | 片段式的环境是指任务可以分解成多个独立的片段,每个片段的结果不影响其他片段,而延续式的环境是指任务是连续的,前一步的结果会影响后一步。 | 片段式的:扔骰子的游戏,延续式的:下棋的游戏 |
静态的 vs 动态的 | 静态的环境是指环境的状态在不采取行动的情况下不会改变,而动态的环境是指环境的状态在不采取行动的情况下会改变。 | 静态的:棋类游戏,动态的:股市 |
离散的 vs 连续的 | 离散的环境是指状态或行动的空间是离散的,而连续的环境是指状态或行动的空间是连续的。 | 离散的:棋类游戏,连续的:自动驾驶汽车的驾驶 |
已知的 vs 未知的 | 已知的环境是指环境的规则或动态是已知的,而未知的环境是指环境的规则或动态是未知的。 | 已知的:棋类游戏,未知的:探索未知的环境 |
智能体类型 | 行为 | 举例 |
---|---|---|
简单反应型智能体 | 根据当前感知做出反应 | 红灯停,绿灯行 |
基于模型的反应型智能体 | 根据当前和过去的感知以及内部的世界模型做出反应 | 知道红绿灯的周期,预测何时灯会变绿,然后决定是否需要完全停车或者是减速等待 |
基于目标的智能体 | 根据目标和当前的环境状态做出反应 | 知道红绿灯的周期,如果预计等待时间过长,可能会选择绕行以达到尽快到达目的地的目标 |
基于效用的智能体 | 根据效用函数做出反应,效用函数会考虑多个目标和目标之间的权衡 | 知道红绿灯的周期,如果预计等待时间过长,但绕行会增加燃油消耗,会根据效用函数权衡是否绕行 |
简单反应型智能体:
// 简单反应型智能体函数
char* SIMPLE_REFLEX_AGENT(char* percept) {
// 如果感知到红灯,停车
if (strcmp(percept, "red") == 0) {
return "stop";
}
// 如果感知到绿灯,开车
else if (strcmp(percept, "green") == 0) {
return "go";
}
}
基于模型的反应型智能体:
// 基于模型的反应型智能体函数
char* MODEL_BASED_REFLEX_AGENT(char* percept) {
// 持久性变量:状态和模型
static char* state;
static char* model;
// 更新状态
state = UPDATE_STATE(state, percept, model);
// 如果状态是红灯,停车
if (strcmp(state, "red_light") == 0) {
return "stop";
}
// 如果状态是绿灯,开车
else if (strcmp(state, "green_light") == 0) {
return "go";
}
// 如果状态是红灯即将结束,准备开车
else if (strcmp(state, "red_light_almost_over") == 0) {
return "prepare_to_go";
}
}
基于目标的智能体:
// 基于目标的智能体函数
char* GOAL_BASED_AGENT(char* percept) {
// 持久性变量:状态、模型和目标
static char* state;
static char* model;
static char* goal;
// 更新状态
state = UPDATE_STATE(state, percept, model);
// 如果目标是快速到达目的地
if (strcmp(goal, "reach_destination_fast") == 0) {
// 如果状态是红灯,并且红灯的持续时间超过阈值,绕道
if (strcmp(state, "red_light") == 0 && LIGHT_DURATION(state) > THRESHOLD) {
return "detour";
}
// 否则,遵循交通信号
else {
return "follow_traffic_lights";
}
}
}
基于效用的智能体:
// 基于效用的智能体函数
char* UTILITY_BASED_AGENT(char* percept) {
// 持久性变量:状态、模型和效用函数
static char* state;
static char* model;
static int (*utility_function)(char*);
// 更新状态
state = UPDATE_STATE(state, percept, model);
// 获取可能的动作
char* actions[] = POSSIBLE_ACTIONS(state);
// 计算每个动作的效用值
int utility_values[sizeof(actions)/sizeof(char*)];
for (int i = 0; i < sizeof(actions)/sizeof(char*); i++) {
utility_values[i] = UTILITY(actions[i], state, utility_function);
}
// 返回效用值最大的动作
return actions[ARGMAX(utility_values)];
}