Dealer.agent.xml

本文介绍了一个基于JADE平台实现的21点游戏智能体系统。该系统详细展示了如何通过智能体之间的交互来模拟真实世界的21点游戏流程,包括玩家加入游戏、下注、发牌等过程。
<!--
<H3>The blackjack dealer controls the game.</H3>

The dealer registers itself at the DirectoryFacilitator
and waits for player agents to join the table.
-->
<agent xmlns="http://jadex.sourceforge.net/jadex"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jadex.sourceforge.net/jadex
http://jadex.sourceforge.net/jadex-0.96.xsd"
name="Dealer"
package="jadex.examples.blackjack.dealer">

<imports>
<import>jadex.examples.blackjack.*</import>
<import>jadex.examples.blackjack.gui.*</import>
<import>jadex.runtime.*</import>
<import>jadex.planlib.*</import>
<import>jadex.util.*</import>
<import>jadex.adapter.fipa.*</import>
<import>java.util.logging.*</import>
<import>java.util.*</import>
</imports>

<capabilities>
<!-- this capability provides easy access to "out-of-the-box"-plans
allowing - for example - to register at the DF. -->
<capability name="dfcap" file="jadex.planlib.DF"/>
</capabilities>

<!--
These are the dealers beliefs. None of these beliefs should be edited in the ADF
because all beliefs are initialised by the plans during the game or have
expedient start-up values (like the three beliefs below).
-->
<beliefs>
<!-- The card set used to play the game. -->
<belief name="cardset" class="CardSet" />

<!-- The number of seconds to wait for answers from players. -->
<belief name="playerwaitmillis" class="long">
<fact>(Integer)$propertybase.getProperty("standard.timeout")</fact>
</belief>

<!-- The number of seconds to wait before drawing a card.
Can be adjusted in the GUI. -->
<belief name="stepdelay" class="int">
<fact>1</fact>
</belief>

<!-- When set to true, each step in the game must be manually
issued in the GUI. -->
<belief name="singleStepMode" class="boolean">
<fact>false</fact>
</belief>

<!-- The self representation of the dealer. -->
<belief name="myself" class="Dealer">
<fact>new Dealer()</fact>
</belief>

<!-- The players. -->
<beliefset name="players" class="Player"/>

<!-- The history of played games. -->
<belief name="statistics" class="GameStatistics">
<fact>new GameStatistics()</fact>
</belief>

<belief name="gamestate" class="GameState">
<fact>new GameState($beliefbase.myself, null)</fact>
</belief>

<belief name="gui" class="DealerFrame"/>

<!--
It's possible that a few different manager (possibly from remote Players)
want to track their players during the game, therefor a beliefset containing
all manager-AIDs is needed.
-->
<beliefset name="tracker" class="AgentIdentifier"/>

</beliefs>

<!--
The dealer has only one initial goal: registering a
dealing-service at the DF and renew this registration
every 10 seconds.
-->
<goals>
<!-- Main goal to play a game. -->
<performgoal name="play_game" exclude="never" retrydelay="3000">
<contextcondition>
$beliefbase.players.length > 0
</contextcondition>
</performgoal>

<!-- Goal to play with a single player (in the context of a larger game). -->
<performgoal name="play_with_player">
<parameter name="player" class="Player"/>
</performgoal>

<!-- Used for registering the dealer at the df. -->
<achievegoalref name="df_register">
<concrete ref="dfcap.df_register"/>
</achievegoalref>
<!-- Used for deregistering the dealer at the df. -->
<achievegoalref name="df_deregister">
<concrete ref="dfcap.df_deregister"/>
</achievegoalref>
</goals>

<!--
These are all the plans, the dealer will execute during a game.
There is one plan for every major task. Have a look into the
plan-classes to get a detailed insight in whats going on there.
-->
<plans>
<!-- Register a player. -->
<plan name="register_plan">
<body class="DealerRegisterPlayerPlan" />
<!-- <body>new DealerRegisterPlayerPlan()</body>-->
<trigger>
<messageevent ref="request_join" />
</trigger>
</plan>

<!-- Play a game. -->
<plan name="play_game_plan">
<body class="DealerGameRoundMasterPlan" />
<!-- <body>new DealerGameRoundMasterPlan()</body> -->
<trigger>
<goal ref="play_game"/>
</trigger>
</plan>

<!-- Play a game with a single player. -->
<plan name="play_with_player_plan">
<parameter name="player" class="Player">
<goalmapping ref="play_with_player.player"/>
</parameter>
<body class="DealerGameRoundPlayerPlan" />
<!-- <body>new DealerGameRoundPlayerPlan()</body>-->
<trigger>
<goal ref="play_with_player"/>
</trigger>
<!-- <contextcondition>
$beliefbase.getBeliefSet("players").containsFact($plan.player)
&& !$plan.player.getState().equals(Player.STATE_IDLE)
</contextcondition>-->
<contextcondition>
$beliefbase.getBeliefSet("players").containsFact($plan.player)
&& !$plan.player.getState().equals(Player.STATE_IDLE)
</contextcondition>
</plan>

<plan name="propagate_game_state_plan">
<body class="PropagateGameStatePlan" />
<!-- <body>new PropagateGameStatePlan()</body> -->
<trigger>
<beliefchange ref="myself"/>
<beliefsetchange ref="players"/>
</trigger>
<!-- not possible because game must always be updated. -->
<!--<precondition>$beliefbase.players.length>0</precondition>-->
</plan>
</plans>

<!-- events -->
<events>

<!-- Event to trigger a step. -->
<internalevent name="step"/>

<!-- player messages -->
<!-- Player request to join the game. -->
<messageevent name="request_join" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestJoin.class</value>
</parameter>
</messageevent>

<!-- A player wants to draw another card. -->
<messageevent name="request_draw" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestDraw.class</value>
</parameter>
</messageevent>

<!-- A player makes a bet. -->
<messageevent name="request_bet" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<!--<parameter name="reply-with" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>-->
<parameter name="conversation-id" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestBet.class</value>
</parameter>
</messageevent>


<messageevent name="refuse_bet" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REFUSE</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestBet.class</value>
</parameter>
</messageevent>

<!-- A player has finished its game (i.e. doesn't want to draw any more cards). -->
<messageevent name="request_finished" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REQUEST</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>RequestFinished.class</value>
</parameter>
</messageevent>

<!-- todo: manager messages -->

<!-- The manager is shutting down the BlackJack application. -->
<messageevent name="inform_shutdown" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="content-start" class="String" direction="fixed">
<value>"manager:shutDown"</value>
</parameter>
</messageevent>
<!-- The manager registers as tracker on game settings. -->
<messageevent name="query_tracking" direction="receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.QUERY_REF</value>
</parameter>
<parameter name="content-start" class="String" direction="fixed">
<value>"manager:registerAsTracker"</value>
</parameter>
</messageevent>

<!-- sent messages -->

<!-- inform a player about a the game result -->
<messageevent name="inform_action_done" direction="send_receive" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>Done.class</value>
</parameter>
</messageevent>

<!-- inform a player about a the game result -->
<messageevent name="refuse_action" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.REFUSE</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
</messageevent>

<!-- inform tracker about playing players -->
<messageevent name="inform_tracker" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="content" class="String" direction="in" />
</messageevent>

<messageevent name="inform_game_state" direction="send" type="fipa">
<parameter name="performative" class="String" direction="fixed">
<value>SFipa.INFORM</value>
</parameter>
<parameter name="language" class="String" direction="fixed">
<value>SFipa.NUGGETS_XML</value>
</parameter>
<parameter name="ontology" class="String" direction="fixed">
<value>BlackjackOntology.ONTOLOGY_NAME</value>
</parameter>
<parameter name="conversation-id" class="String" direction="inout">
<value>SFipa.createUniqueId($scope.getAgentName())</value>
</parameter>
<parameter name="content-class" class="Class" direction="fixed">
<value>GameState.class</value>
</parameter>
</messageevent>

</events>

<expressions>

<!-- The player that gets the next card (if any). -->
<expression name="turnplayer">
select one Player $p from $beliefbase.players
where $p.getState().equals(Player.STATE_PLAYING)
order by $p.getCards().length
</expression>

<!-- Check if it is the dealer's turn. -->
<condition name="dealers_turn">
// The dealer may draw its initial card when all players have two cards.
$beliefbase.myself.getCards().length==0 &&
(select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE) && $p.getCards().length!=2)
== null

// The dealer may draw more cards, when all players are either idle or finished.
|| (select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE) && !$p.getState().equals(Player.STATE_FINISHED))
== null
</condition>

<!-- Check if it is the $player's turn. -->
<condition name="players_turn">
// All players must be idle, playing, or finished.
(select one Player $p from $beliefbase.players
where !$p.getState().equals(Player.STATE_IDLE)
&& !$p.getState().equals(Player.STATE_PLAYING)
&& !$p.getState().equals(Player.STATE_FINISHED))
== null

// And this player must be the first with the least number of cards.
// Hack !!! Assume "any" selects players in order.
&& (select one Player $p from $beliefbase.players
where $p.getState().equals(Player.STATE_PLAYING)
&& $p.getCards().length<=$player.getCards().length
order by $p.getCards().length)
== $player
<parameter name="$player" class="Player"/>
</condition>

<!-- Check if the dealer has drawn its first card. -->
<condition name="dealer_card">
$beliefbase.myself.getCards().length==1
</condition>

<!-- Check if the dealer has finished drawing cards. -->
<condition name="dealer_finished">
$beliefbase.myself.getState().equals(Player.STATE_FINISHED)
|| $beliefbase.myself.getState().equals(Player.STATE_IDLE)
</condition>

</expressions>

<properties>
<!-- logging-properties, needed to debug the application.
Start the Jadex-Logging-Agent to see whats going on behind the scenes -->
<!--<property name="logging.level">Level.INFO</property>-->
</properties>

<configurations>
<configuration name="default">
<beliefs>
<initialbelief ref="gui">
<fact>new DealerFrame($beliefbase.myself, $agent.getExternalAccess())</fact>
</initialbelief>
</beliefs>
<goals>
<!-- Register the dealer at the df on startup. -->
<initialgoal ref="df_register">
<!-- The services to register. -->
<parameter ref="description">
<value>
<!-- This is the agent-description for the dealer. With this description
the dealers is registered at the directory facilitator.
Note, that the dealer only offers one service, that is 'dealing'
(see service description below). -->
SFipa.createAgentDescription(null,
SFipa.createServiceDescription("dealing", "blackjack", "University of Hamburg"))
</value>
</parameter>
</initialgoal>
<initialgoal ref="play_game"/>
<endgoal ref="df_deregister"/>
</goals>
</configuration>
</configurations>

</agent>
org.apache.kyuubi.KyuubiSQLException: Error operating ExecuteStatement: org.apache.spark.sql.catalyst.parser.ParseException: mismatched input 'AS' expecting {<EOF>, ';'}(line 412, pos 28) == SQL == CREATE TABLE orca01_dr_data.ads_rpt_fsm_sfm_kpi_funnel_dmo_t_1218 stored as parquet with dealership_full as ( select distinct dealer_id ,region_code ,dealer_short_name ,dealer_short_name_en ,region_bmw_sale ,region_mini_sale ,region_moto_sale ,region_bmw_sale_en ,region_mini_sale_en ,region_moto_sale_en ,small_region_bmw_sale_en ,small_region_mini_sale_en ,small_region_moto_sale_en ,dealer_investor_name_en ,organization_id ,investor_id from cdl.cdl_dim_com_dmx_dealership_full_t where pday='20251124' ), emp_delear as ( select distinct emp.company_id ,emp.id ,emp.emp_name ,dealer.dealer_id ,dealer.organization_id ,dealer.region_bmw_sale_en ,dealer.region_mini_sale_en ,dealer.region_moto_sale_en ,dealer.small_region_bmw_sale_en ,dealer.small_region_mini_sale_en ,dealer.small_region_moto_sale_en ,dealer.investor_id from dwc.dwc_dim_com_dmo2_t_employee_full_t as emp left join dealership_full as dealer on emp.company_id=dealer.organization_id where emp.pday='20251124' ) ,funnel_base as ( select month_id ,brand_code ,series_code ,eseries_code ,dim_geo_type ,dim_geo_code ,dim_geo_name_cn ,dim_geo_name_en ,data_agg_type ,source_type ,leads_vol ,leads_vol_lm ,leads_vol_ly ,leads_vol_mom ,leads_vol_yoy ,leads_oppty_conv_rate ,leads_oppty_conv_rate_mom ,leads_oppty_conv_rate_yoy ,oppty_vol ,oppty_vol_lm这个报错啥意思
最新发布
11-25
with orders as ( select orders.order_id --订单id ,orders.brand_code_ssc --订单品牌 ,orders.series_code_ssc --订单车系 ,orders.eseries_code_ssc --订单车型 ,orders.model_code_ssc ,orders.create_date --订单创建时间 ,orders.first_confirm_date --订单首次确认时间 ,orders.handover_date --订单交车时间 ,orders.so_no --订单号 ,orders.dealer_id order_dealer_id --订单经销商id ,dealer.dealership_name_cn ,dealer.province_name_zh --省份名称(中文) ,dealer.city_name_zh --城市名称(中文) ,dealer.region_name_zh --所属区域(中文) ,dealer.investor_name_zh --集团名中文 ,dealer.sales_bmw_small_area_name_zh --BMW销售小区中文全称 ,orders.spark_id --订单sparkid ,orders.drawer_id --订单开票人id ,orders.drawer_mobile_phone_number --订单开票人手机号 ,orders.drawer_customer_mobile --订单开票人客档手机号 ,orders.customer_mobile --客档手机号 ,orders.oppty_spark_id --订单机会spark id ,orders.oppty_customer_number --机会客档手机号 ,orders.vin_17 --订单vin17 from dwc.dwc_fact_sal_ncs_order_sales_t orders left join cdl.cdl_dim_com_ssc_dealership_full_t dealer on dealer.pday = '{$fday}' and orders.dealer_id = dealer.nsc_no where orders.pday = '{$pday}' and orders.so_status = '14041007' --已交车 handover_intake_flag='Y' and orders.business_type = '14031001' --订单销售类型:一般销售 --and orders.handover_cancel_flag='N' --订单未取消(退车订单也算) and orders.sale_type = '20141003' --普通零售 and orders.brand_code_ssc = 'BMW' and to_date(orders.handover_date) = from_unixtime(unix_timestamp('{$pday}', 'yyyyMMdd'), 'yyyy-MM-dd') --当天交车数据 --and to_date(orders.handover_date) >= '2025-07-01' --(刷数使用) CPS将与2025-07-01正式生效 )这啥意思
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值