文章目录

  • 前言
  • 一、理论基础
  • 二、在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实现,方法详见视频链接。

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

  1. 基于SSM框架开发生鲜水果蔬菜电商平台系统.rar(含源码及数据库文件)

    基于SSM框架开发,可用于练手,学习开发使用,尤其适合毕业设计,主要功能,商品列表.商品详细页.购物车.登录.注册.商品收藏.订单列表等主要功能.直接用idea或eclipse开发工具,可直接打开项目 ...

  2. 图书商城APP系统(基于uni-app框架)毕设毕业设计毕业论文开题报告参考(上)app功能界面

  3. ssh客户端_一款基于TAS框架的SSH客户端蠕虫

    TEA是一款基于TAS框架的SSH客户端蠕虫,从本质上说,它是一个仿冒的SSH客户端,它能够修改tty输入/输出来实现任意命令执行,或通过SSH连接来上传自身以实现渗透感染. 为了实现该工具的正常功能 ...

  4. 基于Qt框架实现的 C/S架构的外卖平台软件系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628215 基于Qt框架实现的 C_S架构的外卖平台软件系统 演示视频 C/S 架构的外 ...

  5. 【控制】《多智能体机器人系统信息融合与协调》范波老师-第6章-基于分布式强化学习的多 Agent 协调方法

    第5章 回到目录 第7章 第6章-基于分布式强化学习的多 Agent 协调方法 6.1 引言 6.2 多 Agent 强化学习基本理论 6.2.1 基于局部合作的 Q 学习 6.2.2 基于区域合作的 ...

  6. 基于GAN框架的时间序列异常检测研究综述

    一项综述类的课程作业 Anomaly detection with generative adversarial networks for multivariate time series. MAD- ...

  7. 基于Jittor框架实现LSGAN图像生成对抗网络

    基于Jittor框架实现LSGAN图像生成对抗网络 生成对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的 ...

  8. 基于Struts2框架的名片管理系统

    目录 1.系统设计 2.数据库设计 3.系统管理 4.用户管理 5.名片管理 本篇博文将分享一款基于Struts2框架的名片管理系统,JSP引擎为Tomcat9.0,数据库采用的是MySQL5.5,集 ...

  9. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

    混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录

  10. LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战

    LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战 LSTM在解决序列预测的问题时非常强大,因为它们能够存储之前的信息. LSTM是一种时间递归神经网络,它出现的原因是为了解决RN ...

最新文章

  1. Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)
  2. 4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别
  3. Python3 爬虫学习笔记 C05 【Selenium + 无界面浏览器】
  4. java image getscaledinstance_使用getImage()和getScaledInstance()调整java.awt.Image的异常大小...
  5. For web.config setting,reference the book of
  6. flash as3笔记1
  7. 如何使用scikit-learn工具来进行PCA降维
  8. Python 标准库 —— xml
  9. hⅰgh怎么读音发音英语_gh的发音规律
  10. java ocr linux_linux (centos7)上装Tesseract-OCR最新版本(5.0)
  11. 测试开发工程师必备技术栈(附详细技术点)
  12. visual_c++外挂教程(较详细)
  13. servlet.ServletException: java.lang.NoClassDefFoundError: cn/huiyuan/lwj/vo
  14. 数码数字字体_拍中画幅胶片能不能用数码相机测光?
  15. unity构建游戏场景
  16. c语言脱验证,CCAR.适航符合性验证思路简述
  17. php sftp上传图片,SFTP远道文件上传
  18. 语法转换_【语法专题】句型转换(下)
  19. win10双显示屏,分屏显示内容
  20. 基本回路系统和基本割集系统

热门文章

  1. linux服务器优化
  2. 浅析刚参加工作的大学生的心理态势
  3. GdiPlus[34]: IGPGraphicsPath (一)
  4. 【代码优化】坚持使用Override注解
  5. Luogu3825[NOI2017] 游戏
  6. js高级学习笔记(b站尚硅谷)-1-数据类型
  7. 华为平板m5鸿蒙,华为平板M5系列发布:搭载麒麟960 售价2088元起
  8. python if else break_Python条件判断 if-else for循环 while循环 break continue
  9. ajaxfileupload struts2 null_去掉烦人的 “ ! = null (判空语句)
  10. java exception 级别_Java异常体系概述