当前位置: 代码迷 >> 综合 >> 基于genius框架的智能代理(intelligence agent)在IDE平台上的编辑
  详细解决方案

基于genius框架的智能代理(intelligence agent)在IDE平台上的编辑

热度:72   发布时间:2024-03-07 10:42:49.0

文章目录

  • 前言
  • 一、理论基础
  • 二、在Eclipse或IntelliJ中运行GENIUS
    • 1.在Eclipse或IntelliJ中设置Java环境
    • 2.创建一个简单的代理
  • 总结


前言

本实验中,您将使用GENIUS平台使用Java创建简单的协商策略。
先决条件

在开始本实验之前,请确保:

GENIUS已下载
已安装Java 1.8 / JDK 8
Eclipse或IntelliJ都已安装


提示:以下是本篇文章正文内容,下面案例可供参考

一、理论基础

在继续实际操作之前,我们先仔细研究一下SAOP协商协议。尽管在本任务中,我们将仅考虑双边谈判,但已经制定了SAOP协议以处理双边和多党谈判。

双边:只有两名特工参加谈判。
多方:通常是指参加协商会话的两个以上的代理。
SAOP:堆叠式交替供应协议

根据此协议[Aydo?an2017],所有参与者每轮都有一个回合。按照指定的顺序进行转牌,每轮的顺序保持不变。第一方以所有其他人立即遵守的要约开始协商。每当提出要约时,下一个排队的一方都可以采取以下措施:

1.提出还价(因此拒绝并覆盖先前的要价)
2.接受报价
3.走开(例如,在没有任何协议的情况下结束谈判)

依次以顺时针的方式重复此过程,直到达成协议或达到最后期限。为了达成协议,所有各方都应接受要约。如果在截止日期之前未达成任何协议,则协商将失败,并在没有协议的情况下结束。

别忘了,大多数代理商的目标是在谈判中最大化其效用,而不是一无所获(有时会有好处,但只有在有折扣因素和预订价值的情况下,如后面所述)。
为了说明,假设我们有3个代理:代理A,代理B和代理C。
在这里插入图片描述
第二方可以接受此要约,提出要约或走开。 假设代理B提出还价。在这里插入图片描述
假设代理C和代理A在协商表上接受要约。 由于他们都同意这一要约,因此谈判以该要约结束。在这里插入图片描述
该协议已用于国际谈判竞赛中,我们还将在分配中使用此协议。 有关更多信息,请查看《 GENIUS用户指南》第2.1节“ ExampleAgent Wiki”以及上一年的问题。

但是,重要的是要意识到还有许多其他可能的协商协议。 请参阅GENIUS用户指南以获取有关其他协议的信息。

通过两个附加参数对协商会话进行参数设置:时间压力(折扣系数)和预留值。 这些都会影响代理在整个协商过程中的表现。

预留值

保留值是走开的实用程序。 换句话说,这是一个实际价值的阈值,低于此阈值,理性的谈判代表不应接受任何要约。

每个代理可以具有不同的保留值。 它们在首选项配置文件中定义。

时间压力

每个协商会话都有一个预定义的期限,可以是几秒钟的实时时间,也可以是几轮。 仿真环境GENIUS对时间t进行归一化,使得t∈[0,1]。

除期限外,协商会话还可能具有折扣因子δ,随着时间的流逝,这会降低正在协商的要约的效用。 它的范围为δ∈[0,1]。 代理商j在标准化时间t的要约o的效用Utj(o)计算如下:

Utj(o)= Uj(o)?δt(1)
其中Uj(o)是要约的效用,而不受折扣因子的影响。

保留值也以相同的方式折扣。 因此,随着谈判的进行,这会减少分歧的价值,如果没有协议的余地,走开可能是一个好的策略。

二、在Eclipse或IntelliJ中运行GENIUS

1.在Eclipse或IntelliJ中设置Java环境

集成开发环境(IDE)
强烈建议您使用Java IDE(例如Eclipse或IntelliJ)来开发代理。如果您已经有Java的使用经验,那么您可以使用最熟悉的任何IDE。

对于IntelliJ,请按照视频教程中的说明进行操作。IntelliJ Idea配置genius注意:自制作视频以来,GENIUS版本已更新,因此您会注意到一些细微的差异。

对于Eclipse,步骤如下:

1.创建一个新的Java项目
2.选择GENIUS工作目录
3.确保执行环境JRE是1.8版(如果没有,则可以稍后更改)
4.按NEXT
5.如果src目录尚不存在,请选择“创建新的源文件夹”。使用src并选择完成。
6.仍在“新建Java项目”窗口中,转到“库”选项卡。选择添加JAR(在右侧)。转到genius文件夹,然后选择genius-9.x.xx.jar。

提示操作:
1.为了在Eclipse中更改Java版本,请转到项目->属性-> Java编译器,选择启用项目特定设置,然后将版本设置为1.8。
2.为了将genius JAR文件添加到Eclipse中的构建路径,请转至Project-> Properties-> Java Build Path-> Libraries

3.在IntelliJ中,可以通过选择File-> Project Structure-> Project Settings来更改项目设置。

2.创建一个简单的代理

2.1 接下来,按照步骤创建新的代理:

1.在您的项目中,创建一个名为group的新程序包.
2.从文件夹bilateralexamples文件夹中,将文件RandomBidderExample.java移动或复制到先前创建的包中。
3.在编辑器中转到RandomBidderExample源代码。 将软件包名称(第一行)更改为正确的软件包名称(例如group1)。
4.将类名称更改为MyAgent(提示:在Eclipse中,通过选择右键单击并重构以更新所有依赖项来执行此操作)。
5.(可选)在getDescription()方法中,将代理的描述更改为您的代理特有的内容(例如“我是最大的谈判代理”)
在Eclipse中,最终结果应如下所示(对于group1):
在这里插入图片描述
2.2使用GENIUS界面运行您的代理:

首先,您需要设置IDE环境,以便可以在IDE中运行GENIUS(而不是像上一个实验中那样双击JAR文件)。 否则,我们将看不到任何控制台输出。 为此,您需要运行genius.Application类。 要在Eclipse中执行此操作:

1.转到项目的“运行”配置(例如,在“运行”菜单项下,或通过右键单击项目,选择“运行方式”)。
2.右键单击Java应用程序,然后选择新建配置。
3.将主类设置为genius.Application,并将名称设置为Application。 按应用。 它应该看起来像图5。
4.选择运行以启动GENIUS
在这里插入图片描述
现在,我们准备在GENIUS中添加聚会:

1.在GENIUS界面中,选择“参与者”选项卡。
2.右键单击任何一方,然后选择添加新方
3.转到存储.class文件的目录(在Eclipse中,这是bin目录;在IntelliJ中,这是out目录),转到groupn子目录,然后选择MyAgent.cass
4.检查聚会出现在列表中(它将显示在末尾)
5.开始新的协商会话并使用您的代理


2.3修改谈判策略
2.3.1理解效用空间
实现UtilitySpace接口的对象包含域和代理的首选项配置文件,即问题,值,权重和评估。 请注意,座席只知道他自己的权重和评估,而不知道对手的权重和评估。

在此任务中,您将探索该对象/类。 特别是,由于我们正在处理加性实用程序,因此我们对UtilitySpace的实现(称为AdditiveUtilitySpace)感兴趣。 以下代码访问域并显示问题等。尝试使用Javadoc作为各种方法的参考来理解每一行代码。 您将需要熟悉开发自己的代理的类和方法。

将代码片段复制粘贴到代理的init(NegotiationInfo info)方法中(在super.init(info)之后):

AbstractUtilitySpace utilitySpace = info.getUtilitySpace();
AdditiveUtilitySpace additiveUtilitySpace = (AdditiveUtilitySpace) utilitySpace;List< Issue > issues = additiveUtilitySpace.getDomain().getIssues();for (Issue issue : issues) {
    int issueNumber = issue.getNumber();System.out.println(">> " + issue.getName() + " weight: " + additiveUtilitySpace.getWeight(issueNumber));// Assuming that issues are discrete onlyIssueDiscrete issueDiscrete = (IssueDiscrete) issue;EvaluatorDiscrete evaluatorDiscrete = (EvaluatorDiscrete) additiveUtilitySpace.getEvaluator(issueNumber);for (ValueDiscrete valueDiscrete : issueDiscrete.getValues()) {
    System.out.println(valueDiscrete.getValue());System.out.println("Evaluation(getValue): " + evaluatorDiscrete.getValue(valueDiscrete));try {
    System.out.println("Evaluation(getEvaluation): " + evaluatorDiscrete.getEvaluation(valueDiscrete));} catch (Exception e) {
    e.printStackTrace();}}
}

复制代码后,您将遇到一些错误,因为您需要导入多个类。 在Eclipse中,您可以轻松地做到这一点,方法是将光标放在错误所在的类名的末尾,然后按CTRL + Space(可以使用它完成代码)。 这将为您提供几个选项,通常选择第一个。 按Enter键将导入相应的类。

确保您修复了所有错误。 与您的代理运行一次协商会话,并检查控制台中产生的输出。
尝试了解每一行的内容。 根据需要在上面的代码中添加注释。

2.3.2 一个简单的让步策略

现在,我们将修改协商策略。协商策略包括3种可能的操作:

接受对方的提议
生成(反)要约(这自动意味着拒绝对方要约)
结束谈判。
为此,需要在NegotiationParty接口中实现两种主要方法:

receiveMessage将收到报价。然后将需要存储此报价以供以后使用。
choiceAction用于选择上述三个动作之一。
请注意,如果代理是第一个提出要约的人,那么第一个动作应该是生成要约。在继续进行之前,请看一下如何在您的简单代理中实现这两种方法,并确保您了解给定的代码。

接下来,我们介绍一个简单的让步策略。这个邀约描述了每次产生和介绍邀约的效用水平

1.使用简单的线性方法来设置目标效用,该目标效用从可能的最高效用(即最佳报价的效用)开始,然后在达到时限时降低到阈值。使用变量设置此阈值(例如,它可以是一组可能要约中最高和最低可能效用之间的平均值)。随意使用稍微更高级的方法,例如Boulware或Conceder策略(请参阅有关谈判讲座和/或文献的幻灯片)。下面提供了一些可以帮助您的代码:
获得最佳出价(请注意,您需要捕获异常,当没有出价时会抛出该异常):

private Bid getMaxUtilityBid() {
    try {
    return utilitySpace.getMaxUtilityBid();} catch (Exception e) {
    e.printStackTrace();}return null;
}

访问归一化时间t∈[0,1]:

double time = getTimeLine().getTime();

2.使用已经提供的代码选择一个具有最低实用阈值的随机报价(我们将在以后改进此策略)。
3.向您的对手出价,并接受对手收到的,其效用等于或大于目标效用的任何要约。
4.测试您的解决方案。
注意,使用随机要约方法不是很有效。 考虑如何改进(无需实施)。

总结

该文章主要介绍了如果用eclipse实现智能代理的案例,如果在完成实验的过程中eclipse产生难以接受的bug。请转向用 intillJ Idea实现,方法详见视频链接。

  相关解决方案