1 | package agents.anac.y2015.fairy;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 |
|
---|
5 | import genius.core.Bid;
|
---|
6 | import genius.core.utility.AdditiveUtilitySpace;
|
---|
7 |
|
---|
8 | public class strategy {
|
---|
9 | private AdditiveUtilitySpace utilitySpace;
|
---|
10 | private negotiatingInfo negotiatingInfo;
|
---|
11 | //inamoto
|
---|
12 | public double minThreshold = 0.8;
|
---|
13 |
|
---|
14 | private double df = 0.0; // 髯キ謇假スス�イ髯滄��ゥ繧托スス�ソ郢ァ閧イ�ス
|
---|
15 | private double rv = 0.0; // 鬨セ�。陷キ�ゥ�ス�ソ隴乗��ス�セ�ス�。髫エ�ャ�ス�シ
|
---|
16 |
|
---|
17 | public strategy(AdditiveUtilitySpace utilitySpace, negotiatingInfo negotiatingInfo) {
|
---|
18 | this.utilitySpace = utilitySpace;
|
---|
19 | this.negotiatingInfo = negotiatingInfo;
|
---|
20 | df = utilitySpace.getDiscountFactor();
|
---|
21 | rv = utilitySpace.getReservationValue();
|
---|
22 | }
|
---|
23 |
|
---|
24 | // 髯キ�ソ隲、諛カ�ス�ョ�ス�ケ髯具スサ�ス�、髯橸スウ�ス�ス
|
---|
25 | public boolean selectAccept(Bid offeredBid, double time) {
|
---|
26 | try {
|
---|
27 | double offeredBidUtil = utilitySpace.getUtility(offeredBid);
|
---|
28 |
|
---|
29 | if(offeredBidUtil >= getThreshold(time)){ return true; }
|
---|
30 | else{ return false; }
|
---|
31 | } catch (Exception e) {
|
---|
32 | System.out.println("髯キ�ソ隲、諛カ�ス�ョ�ス�ケ髯具スサ�ス�、髯橸スウ陞「�ケ遶頑・「譽費ソス�ア髫ー�ィ陷会スア�ス�ス驍オ�コ�ス�セ驍オ�コ陷会スア隨ウ�ス");
|
---|
33 | e.printStackTrace();
|
---|
34 | return false;
|
---|
35 | }
|
---|
36 | }
|
---|
37 |
|
---|
38 | // 髣費ソス�ス�、髮九j�ス�ス�オ郢ァ�ス�ス�コ�ス�ス隲「蟷�・懶ソス�ス
|
---|
39 | public boolean selectEndNegotiation(double time) {
|
---|
40 | if(rv * Math.pow(df,time) > getThreshold(time) ) return true;
|
---|
41 |
|
---|
42 | return false;
|
---|
43 | }
|
---|
44 |
|
---|
45 | // 鬯ョ�「�ス�セ髯区サゑスス�、驛「�ァ陞ウ螟イ�ス�ソ隴∫オカ�ス
|
---|
46 | public double getThreshold(double time) {
|
---|
47 |
|
---|
48 |
|
---|
49 | double a = minThreshold; //隴幢ソス闖エ蠑ア縲堤ケァ繧�イ玖ォ「荵怜�邵コ�ォ陟募干笳�クコ�ス��邵コ髦ェ�櫁屐�、(陷亥沺辟皮クコ�ョ陟托スキ雎鯉ソス)
|
---|
50 | // double threshold = 1.0 - (1.0 - a) * time;
|
---|
51 | //boulware鬚ィ縺ォ險よュ」
|
---|
52 | double threshold = 1.0 - (1.0 - a ) * Math.pow(time, (1.0/0.5));
|
---|
53 | //隰厄ソス�ョ螢ケ��ケァ蠕娯�サ邵コ�ス�玖屐�、邵コ�ォ陷キ莉」ツー邵コ�」邵コ�ヲ騾カ�エ驍ア螟ょ飭邵コ�ォ陞溽甥陌夂クコ蜷カ�狗クコ蜉ア窶ウ邵コ�ス�ス�、邵コ�ョ陞ウ貅ス讓溽クイ�ス
|
---|
54 |
|
---|
55 | // System.out.println("test round:"+time);
|
---|
56 | // System.out.println("test time:"+(double)time/180);
|
---|
57 | /* 髣費ソス�ス�、髮九i蛻、陝具スカ鬨セ�。�ス�・驍オ�コ�ス�ォ髯憺屮�ス�コ驍オ�コ�ス�・驍オ�コ髯ヲ�。hreshold(t)驛「�ァ陞ウ螟イ�ス�ィ�ス�ュ鬮ォ�ェ陋ケ�サ隨假ソス�ケ�ァ�ス�ス */
|
---|
58 | /* negotiatingInfo驍オ�コ闕オ譎「�ス闃ス�ャ�ス陷郁肩�ス�。闔��・�ス�ア�ス�・髮趣ソス�ス�エ驍オ�コ�ス�ョ鬩搾スィ�ス�ア鬮ォ�ェ陜捺コ佩鈴劈�」�ス�ア驛「�ァ髮区ァォ蠕宣辧蜍溷ケイ邵イ蝣、�ク�コ鬮ヲ�ェ�ス迢暦スク�コ�ス�ョ驍オ�コ�ス�ァ髣厄スエ�ス�ソ驍オ�コ�ス�」驍オ�コ�ス�ヲ驛「�ァ郢ァ鬆托ソス驍オ�コ�ス�ス */
|
---|
59 | // 髣懃§�ス�ス�シ�ス�ス
|
---|
60 | ArrayList<Object> opponents = negotiatingInfo.getOpponents();
|
---|
61 | //闔臥エ具スコ�コ邵コ謔溽イ玖ォ「荳奇ス帝ィセ�イ郢ァ竏壺�サ邵コ�ス�狗クコ�ィ邵コ髦ェ竊鍋クコ�ッ髢セ�ェ髴�スォ郢ァ繧会スゥ閧エ�・�オ騾ァ�ス竊楢アャ竏夲シ�ケァ蠕鯉ス狗クイ�ス(陟墓「ァ辟皮クコ�ョ陟托スア雎鯉ソス)
|
---|
62 | int acceptNum = 0;
|
---|
63 | for(Object sender:opponents){
|
---|
64 | if(negotiatingInfo.getOpponentsBool(sender))
|
---|
65 | acceptNum += 1;
|
---|
66 | }
|
---|
67 | int negotiatorNum = negotiatingInfo.getNegotiatorNum()-1;//髢セ�ェ陋サ�ス�帝ォッ�、邵コ�ス笳�滋�、雋り歓�ス�ス�ス隰ィ�ー
|
---|
68 |
|
---|
69 | // System.out.println("test:"+(double)acceptNum/negotiatorNum);
|
---|
70 |
|
---|
71 | threshold = threshold - (threshold - minThreshold)*(double)acceptNum/negotiatorNum;
|
---|
72 | //陷サ�ィ郢ァ鄙ォ窶イ陷キ蝓湲咲クコ蜉ア窶サ邵コ�ス笳�ケァ迚咏イ玖ォ「荳奇シ�邵コ�ヲ邵コ�ス�玖滋�コ隰ィ�ー邵コ�ョ驕抵スコ驍�ソス�ス邵コ�ス邵コ蜿ー�コ�、雋ょウィ�ス邵コ蜉ア窶ウ邵コ�ス�ス�、郢ァ蜑�スク荵敖」郢ァ荵晢ソス繧�螺邵コ�ス邵コ蜉ア�ス竏オ諤呵抄蠑ア縲堤ケァ�ョinThreshold邵コ�セ邵コ�ァ
|
---|
73 | //髫ェ閧イ�ョ蜉ア��邵コ貅假シ�邵コ髦ェ�櫁屐�、-(髫ェ閧イ�ョ蜉ア��邵コ貅假シ�邵コ髦ェ�櫁屐�、-隴幢ソス闖エ蠑ア�ス邵コ蜉ア窶ウ邵コ�ス�ス�、)*驕抵スコ驍�ソス
|
---|
74 |
|
---|
75 | negotiatingInfo.clearOpponentsBool();//闔��、雋り�諞セ隲キ荵晢ソス郢ァ�ッ郢晢スェ郢ァ�「
|
---|
76 | /*螯・蜊斐@縺吶℃縺ェ縺�h縺�↓菫ョ豁」縺吶k縺ォ縺ッ
|
---|
77 | *逶ク謇九′蜊泌鴨逧�°髱槫鵠蜉帷噪縺九r蛻、譁ュ縺吶k蠢�ヲ√′縺ゅk縲�
|
---|
78 | * 蜊泌鴨逧�°縺、雉帛酔竊偵%縺。繧峨�蠑キ豌励↓蜃コ縺ヲ繧ゅh縺�
|
---|
79 | * 髱槫鵠蜉帷噪縺九▽雉帛酔竊偵%縺。繧峨�蠑ア豌励↓蜃コ縺溘⊇縺�′繧医>
|
---|
80 | * */
|
---|
81 | //割引雇用の適用
|
---|
82 | threshold = threshold * Math.pow(df,time);
|
---|
83 | //最低の値は守る。です。
|
---|
84 | if(threshold < minThreshold) threshold = minThreshold;
|
---|
85 |
|
---|
86 | // System.out.println("threshold:"+threshold);
|
---|
87 | return threshold;
|
---|
88 | }
|
---|
89 | }
|
---|