Java智能体案例

wen java案例 1

本文目录导读:

Java智能体案例

  1. 智能体核心架构
  2. 感知系统
  3. 决策系统
  4. 行动执行系统
  5. 环境系统
  6. 记忆系统
  7. 具体智能体实现
  8. 主程序
  9. 增强功能(可选)
  10. 运行说明
  11. 扩展建议

我将为您提供一个完整的Java智能体案例,展示如何使用Java实现一个具备感知、决策和行动能力的简单智能体系统。

智能体核心架构

// Agent.java - 智能体基类
public abstract class Agent {
    protected String name;
    protected Environment environment;
    protected Perception perception;
    protected DecisionMaker decisionMaker;
    protected ActionExecutor actionExecutor;
    protected Memory memory;
    public Agent(String name) {
        this.name = name;
        this.memory = new Memory();
    }
    public abstract void initialize();
    public abstract void run();
    protected void perceive() {
        perception = environment.getPerception();
    }
    protected void decide() {
        Decision decision = decisionMaker.makeDecision(perception, memory);
        memory.storeDecision(decision);
    }
    protected void act(Decision decision) {
        actionExecutor.execute(decision);
    }
    // Getters and setters
    public String getName() { return name; }
    public Environment getEnvironment() { return environment; }
    public void setEnvironment(Environment environment) { 
        this.environment = environment; 
        environment.registerAgent(this);
    }
}

感知系统

// Perception.java - 感知信息类
public class Perception {
    private Map<String, Object> perceptions = new HashMap<>();
    private long timestamp;
    public void addPerception(String key, Object value) {
        perceptions.put(key, value);
        timestamp = System.currentTimeMillis();
    }
    public Object getPerception(String key) {
        return perceptions.get(key);
    }
    public Map<String, Object> getAllPerceptions() {
        return Collections.unmodifiableMap(perceptions);
    }
}
// Sensor.java - 传感器接口
public interface Sensor {
    void perceive(Environment environment);
    Perception getPerception();
}
// EnvironmentSensor.java - 环境传感器实现
public class EnvironmentSensor implements Sensor {
    private Perception perception;
    @Override
    public void perceive(Environment environment) {
        perception = new Perception();
        // 感知环境状态
        perception.addPerception("temperature", environment.getTemperature());
        perception.addPerception("humidity", environment.getHumidity());
        perception.addPerception("position", environment.getAgentPosition());
        perception.addPerception("obstacles", environment.getObstacles());
        perception.addPerception("target", environment.getTarget());
    }
    @Override
    public Perception getPerception() {
        return perception;
    }
}

决策系统

// Decision.java - 决策类
public class Decision {
    private String action;
    private Map<String, Object> parameters;
    private double confidence;
    public Decision(String action, Map<String, Object> parameters, double confidence) {
        this.action = action;
        this.parameters = parameters;
        this.confidence = confidence;
    }
    // Getters
    public String getAction() { return action; }
    public Map<String, Object> getParameters() { return parameters; }
    public double getConfidence() { return confidence; }
}
// DecisionMaker.java - 决策器接口
public interface DecisionMaker {
    Decision makeDecision(Perception perception, Memory memory);
}
// RuleBasedDecisionMaker.java - 基于规则的决策器
public class RuleBasedDecisionMaker implements DecisionMaker {
    private List<Rule> rules = new ArrayList<>();
    public void addRule(Rule rule) {
        rules.add(rule);
    }
    @Override
    public Decision makeDecision(Perception perception, Memory memory) {
        for (Rule rule : rules) {
            if (rule.matches(perception)) {
                return rule.getDecision();
            }
        }
        // 默认决策
        return new Decision("idle", Collections.emptyMap(), 0.5);
    }
}
// Rule.java - 规则接口
public interface Rule {
    boolean matches(Perception perception);
    Decision getDecision();
}
// NavigationRule.java - 导航规则示例
public class NavigationRule implements Rule {
    @Override
    public boolean matches(Perception perception) {
        Integer position = (Integer) perception.getPerception("position");
        Integer target = (Integer) perception.getPerception("target");
        return position != null && target != null && position < target;
    }
    @Override
    public Decision getDecision() {
        Map<String, Object> params = new HashMap<>();
        params.put("direction", "forward");
        return new Decision("move", params, 0.9);
    }
}

行动执行系统

// ActionExecutor.java - 行动执行器
public class ActionExecutor {
    private Map<String, Action> actions = new HashMap<>();
    public void registerAction(String name, Action action) {
        actions.put(name, action);
    }
    public void execute(Decision decision) {
        String actionName = decision.getAction();
        Action action = actions.get(actionName);
        if (action != null) {
            action.execute(decision.getParameters());
        } else {
            throw new RuntimeException("Unknown action: " + actionName);
        }
    }
}
// Action.java - 行动接口
public interface Action {
    void execute(Map<String, Object> parameters);
}
// MoveAction.java - 移动行动
public class MoveAction implements Action {
    @Override
    public void execute(Map<String, Object> parameters) {
        String direction = (String) parameters.get("direction");
        System.out.println("执行移动操作,方向: " + direction);
        // 实际移动逻辑
        switch (direction) {
            case "forward":
                // 向前移动
                break;
            case "backward":
                // 向后移动
                break;
            case "left":
                // 向左移动
                break;
            case "right":
                // 向右移动
                break;
        }
    }
}

环境系统

// Environment.java - 环境类
public class Environment {
    private int temperature;
    private int humidity;
    private int agentPosition;
    private int target;
    private List<Integer> obstacles;
    private List<Agent> agents;
    public Environment() {
        this.temperature = 25;
        this.humidity = 60;
        this.agentPosition = 0;
        this.target = 10;
        this.obstacles = Arrays.asList(3, 5, 7);
        this.agents = new ArrayList<>();
    }
    public void updateState() {
        // 环境状态更新逻辑
        temperature = 25 + (int)(Math.random() * 10);
        humidity = 55 + (int)(Math.random() * 20);
    }
    public Perception getPerception() {
        Perception perception = new Perception();
        perception.addPerception("temperature", temperature);
        perception.addPerception("humidity", humidity);
        perception.addPerception("position", agentPosition);
        perception.addPerception("obstacles", obstacles);
        perception.addPerception("target", target);
        return perception;
    }
    public void registerAgent(Agent agent) {
        agents.add(agent);
    }
    public void updateAgentPosition(int newPosition) {
        // 检查障碍物
        if (obstacles.contains(newPosition)) {
            System.out.println("遇到障碍物,无法移动");
            return;
        }
        agentPosition = newPosition;
        // 检查是否到达目标
        if (agentPosition == target) {
            System.out.println("到达目标点!");
        }
    }
    // Getters
    public int getTemperature() { return temperature; }
    public int getHumidity() { return humidity; }
    public int getAgentPosition() { return agentPosition; }
    public int getTarget() { return target; }
    public List<Integer> getObstacles() { return obstacles; }
}

记忆系统

// Memory.java - 记忆类
public class Memory {
    private List<Experience> experiences;
    private Map<String, Object> knowledge;
    private int memorySize;
    public Memory() {
        this.experiences = new ArrayList<>();
        this.knowledge = new HashMap<>();
        this.memorySize = 100;
    }
    public void storeDecision(Decision decision) {
        if (experiences.size() >= memorySize) {
            experiences.remove(0); // 移除最旧的记忆
        }
        experiences.add(new Experience(decision));
    }
    public void storeKnowledge(String key, Object value) {
        knowledge.put(key, value);
    }
    public Object getKnowledge(String key) {
        return knowledge.get(key);
    }
    public List<Experience> getExperiences() {
        return Collections.unmodifiableList(experiences);
    }
    public void clear() {
        experiences.clear();
        knowledge.clear();
    }
}
// Experience.java - 经验类
public class Experience {
    private Decision decision;
    private long timestamp;
    public Experience(Decision decision) {
        this.decision = decision;
        this.timestamp = System.currentTimeMillis();
    }
    public Decision getDecision() { return decision; }
    public long getTimestamp() { return timestamp; }
}

具体智能体实现

// NavigationAgent.java - 导航智能体
public class NavigationAgent extends Agent {
    public NavigationAgent(String name) {
        super(name);
    }
    @Override
    public void initialize() {
        // 初始化传感器
        EnvironmentSensor sensor = new EnvironmentSensor();
        this.perception = sensor.getPerception();
        // 初始化决策器
        RuleBasedDecisionMaker decisionMaker = new RuleBasedDecisionMaker();
        // 添加决策规则
        decisionMaker.addRule(new NavigationRule());
        decisionMaker.addRule(new ObstacleAvoidanceRule());
        decisionMaker.addRule(new ArrivalRule());
        this.decisionMaker = decisionMaker;
        // 注册行动
        ActionExecutor executor = new ActionExecutor();
        executor.registerAction("move", new MoveAction());
        executor.registerAction("avoid", new AvoidAction());
        executor.registerAction("stop", new StopAction());
        this.actionExecutor = executor;
        System.out.println("智能体 " + name + " 初始化完成");
    }
    @Override
    public void run() {
        int maxIterations = 100;
        int currentIteration = 0;
        while (currentIteration < maxIterations) {
            // 感知环境
            perceive();
            // 做出决策
            decide();
            // 获取最近决策并执行
            List<Experience> experiences = memory.getExperiences();
            if (!experiences.isEmpty()) {
                Decision lastDecision = experiences.get(experiences.size() - 1).getDecision();
                act(lastDecision);
            }
            // 更新环境
            environment.updateState();
            // 检查是否完成任务
            Perception currentPerception = environment.getPerception();
            Integer position = (Integer) currentPerception.getPerception("position");
            Integer target = (Integer) currentPerception.getPerception("target");
            if (position != null && target != null && position.equals(target)) {
                System.out.println("智能体 " + name + " 成功到达目标!");
                break;
            }
            currentIteration++;
            // 模拟时间延迟
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }
}
// ObstacleAvoidanceRule.java - 障碍物规避规则
public class ObstacleAvoidanceRule implements Rule {
    @Override
    public boolean matches(Perception perception) {
        Integer position = (Integer) perception.getPerception("position");
        List<Integer> obstacles = (List<Integer>) perception.getPerception("obstacles");
        return obstacles != null && position != null && obstacles.contains(position + 1);
    }
    @Override
    public Decision getDecision() {
        Map<String, Object> params = new HashMap<>();
        params.put("direction", "left");
        return new Decision("avoid", params, 0.8);
    }
}
// ArrivalRule.java - 到达规则
public class ArrivalRule implements Rule {
    @Override
    public boolean matches(Perception perception) {
        Integer position = (Integer) perception.getPerception("position");
        Integer target = (Integer) perception.getPerception("target");
        return position != null && target != null && position.equals(target);
    }
    @Override
    public Decision getDecision() {
        return new Decision("stop", Collections.emptyMap(), 1.0);
    }
}
// AvoidAction.java - 规避行动
public class AvoidAction implements Action {
    @Override
    public void execute(Map<String, Object> parameters) {
        System.out.println("执行规避行动");
        // 实际规避逻辑
    }
}
// StopAction.java - 停止行动
public class StopAction implements Action {
    @Override
    public void execute(Map<String, Object> parameters) {
        System.out.println("执行停止行动");
        // 停止逻辑
    }
}

主程序

// Main.java - 主程序
public class Main {
    public static void main(String[] args) {
        // 创建环境
        Environment environment = new Environment();
        // 创建智能体
        NavigationAgent agent = new NavigationAgent("NavigationAgent-1");
        // 关联环境和智能体
        agent.setEnvironment(environment);
        // 初始化智能体
        agent.initialize();
        // 启动智能体
        System.out.println("启动智能体系统...");
        agent.run();
        System.out.println("智能体系统运行结束");
    }
}

增强功能(可选)

// LearningAgent.java - 学习型智能体
public class LearningAgent extends Agent {
    private ReinforcementLearning learning;
    public LearningAgent(String name) {
        super(name);
        this.learning = new ReinforcementLearning();
    }
    @Override
    public void initialize() {
        // 初始化和学习配置
        learning.setLearningRate(0.01);
        learning.setDiscountFactor(0.9);
        learning.setExplorationRate(0.1);
    }
    @Override
    public void run() {
        // 学习和决策循环
        while (true) {
            perceive();
            decide();
            act(lastDecision);
            // 获取奖励
            double reward = getTaskReward();
            // 更新学习模型
            learning.update(reward);
            // 探索或利用
            if (Math.random() < learning.getExplorationRate()) {
                // 随机探索
                exploreAction();
            } else {
                // 利用已有知识
                exploitKnowledge();
            }
        }
    }
    private double getTaskReward() {
        // 计算任务奖励
        return 0.0;
    }
    private void exploreAction() {
        // 随机行动
    }
    private void exploitKnowledge() {
        // 从经验中学习行动
    }
}
// ReinforcementLearning.java - 强化学习类
public class ReinforcementLearning {
    private Map<String, Double> stateValues;
    private double learningRate;
    private double discountFactor;
    private double explorationRate;
    public void update(double reward) {
        // Q-Learning或SARSA算法更新
    }
    public Map<String, Double> getStateValues() {
        return stateValues;
    }
    // Getters and setters
    public double getLearningRate() { return learningRate; }
    public void setLearningRate(double learningRate) { this.learningRate = learningRate; }
    public double getDiscountFactor() { return discountFactor; }
    public void setDiscountFactor(double discountFactor) { this.discountFactor = discountFactor; }
    public double getExplorationRate() { return explorationRate; }
    public void setExplorationRate(double explorationRate) { this.explorationRate = explorationRate; }
}

运行说明

  1. 创建项目结构

    • 将所有类放入合适的包名(如 com.agentdemo
    • 确保所有Java文件正确编译
  2. 运行程序

    javac com/agentdemo/*.java
    java com.agentdemo.Main
  3. 预期输出

    初始化智能体系统...
    智能体 NavigationAgent-1 初始化完成
    启动智能体系统...
    遇到障碍物,无法移动
    执行规避行动
    到达目标点!
    智能体 NavigationAgent-1 成功到达目标!
    智能体系统运行结束

扩展建议

  1. 多智能体系统:扩展Agent类支持多智能体协作
  2. 深度学习集成:添加神经网络支持
  3. 实时通信:添加Agent间通信机制
  4. 并发处理:使用线程池并行处理多个Agent
  5. 可视化界面:添加JavaFX或Swing界面

这个案例提供了一个完整的智能体框架,您可以根据实际需求进行扩展和修改。

抱歉,评论功能暂时关闭!