package agents.anac.y2015.fairy; import java.util.ArrayList; import genius.core.Bid; import genius.core.utility.AdditiveUtilitySpace; public class strategy { private AdditiveUtilitySpace utilitySpace; private negotiatingInfo negotiatingInfo; //inamoto public double minThreshold = 0.8; private double df = 0.0; // 髯キ謇假スス�イ髯滄��ゥ繧托スス�ソ郢ァ閧イ�ス private double rv = 0.0; // 鬨セ�。陷キ�ゥ�ス�ソ隴乗��ス�セ�ス�。髫エ�ャ�ス�シ public strategy(AdditiveUtilitySpace utilitySpace, negotiatingInfo negotiatingInfo) { this.utilitySpace = utilitySpace; this.negotiatingInfo = negotiatingInfo; df = utilitySpace.getDiscountFactor(); rv = utilitySpace.getReservationValue(); } // 髯キ�ソ隲、諛カ�ス�ョ�ス�ケ髯具スサ�ス�、髯橸スウ�ス�ス public boolean selectAccept(Bid offeredBid, double time) { try { double offeredBidUtil = utilitySpace.getUtility(offeredBid); if(offeredBidUtil >= getThreshold(time)){ return true; } else{ return false; } } catch (Exception e) { System.out.println("髯キ�ソ隲、諛カ�ス�ョ�ス�ケ髯具スサ�ス�、髯橸スウ陞「�ケ遶頑・「譽費ソス�ア髫ー�ィ陷会スア�ス�ス驍オ�コ�ス�セ驍オ�コ陷会スア隨ウ�ス"); e.printStackTrace(); return false; } } // 髣費ソス�ス�、髮九j�ス�ス�オ郢ァ�ス�ス�コ�ス�ス隲「蟷�・懶ソス�ス public boolean selectEndNegotiation(double time) { if(rv * Math.pow(df,time) > getThreshold(time) ) return true; return false; } // 鬯ョ�「�ス�セ髯区サゑスス�、驛「�ァ陞ウ螟イ�ス�ソ隴∫オカ�ス public double getThreshold(double time) { double a = minThreshold; //隴幢ソス闖エ蠑ア縲堤ケァ繧�イ玖ォ「荵怜�邵コ�ォ陟募干笳�クコ�ス��邵コ髦ェ�櫁屐�、(陷亥沺辟皮クコ�ョ陟托スキ雎鯉ソス) // double threshold = 1.0 - (1.0 - a) * time; //boulware鬚ィ縺ォ險よュ」 double threshold = 1.0 - (1.0 - a ) * Math.pow(time, (1.0/0.5)); //隰厄ソス�ョ螢ケ��ケァ蠕娯�サ邵コ�ス�玖屐�、邵コ�ォ陷キ莉」ツー邵コ�」邵コ�ヲ騾カ�エ驍ア螟ょ飭邵コ�ォ陞溽甥陌夂クコ蜷カ�狗クコ蜉ア窶ウ邵コ�ス�ス�、邵コ�ョ陞ウ貅ス讓溽クイ�ス // System.out.println("test round:"+time); // System.out.println("test time:"+(double)time/180); /* 髣費ソス�ス�、髮九i蛻、陝具スカ鬨セ�。�ス�・驍オ�コ�ス�ォ髯憺屮�ス�コ驍オ�コ�ス�・驍オ�コ髯ヲ�。hreshold(t)驛「�ァ陞ウ螟イ�ス�ィ�ス�ュ鬮ォ�ェ陋ケ�サ隨假ソス�ケ�ァ�ス�ス */ /* negotiatingInfo驍オ�コ闕オ譎「�ス闃ス�ャ�ス陷郁肩�ス�。闔��・�ス�ア�ス�・髮趣ソス�ス�エ驍オ�コ�ス�ョ鬩搾スィ�ス�ア鬮ォ�ェ陜捺コ佩鈴劈�」�ス�ア驛「�ァ髮区ァォ蠕宣辧蜍溷ケイ邵イ蝣、�ク�コ鬮ヲ�ェ�ス迢暦スク�コ�ス�ョ驍オ�コ�ス�ァ髣厄スエ�ス�ソ驍オ�コ�ス�」驍オ�コ�ス�ヲ驛「�ァ郢ァ鬆托ソス驍オ�コ�ス�ス */ // 髣懃§�ス�ス�シ�ス�ス ArrayList opponents = negotiatingInfo.getOpponents(); //闔臥エ具スコ�コ邵コ謔溽イ玖ォ「荳奇ス帝ィセ�イ郢ァ竏壺�サ邵コ�ス�狗クコ�ィ邵コ髦ェ竊鍋クコ�ッ髢セ�ェ髴�スォ郢ァ繧会スゥ閧エ�・�オ騾ァ�ス竊楢アャ竏夲シ�ケァ蠕鯉ス狗クイ�ス(陟墓「ァ辟皮クコ�ョ陟托スア雎鯉ソス) int acceptNum = 0; for(Object sender:opponents){ if(negotiatingInfo.getOpponentsBool(sender)) acceptNum += 1; } int negotiatorNum = negotiatingInfo.getNegotiatorNum()-1;//髢セ�ェ陋サ�ス�帝ォッ�、邵コ�ス笳�滋�、雋り歓�ス�ス�ス隰ィ�ー // System.out.println("test:"+(double)acceptNum/negotiatorNum); threshold = threshold - (threshold - minThreshold)*(double)acceptNum/negotiatorNum; //陷サ�ィ郢ァ鄙ォ窶イ陷キ蝓湲咲クコ蜉ア窶サ邵コ�ス笳�ケァ迚咏イ玖ォ「荳奇シ�邵コ�ヲ邵コ�ス�玖滋�コ隰ィ�ー邵コ�ョ驕抵スコ驍�ソス�ス邵コ�ス邵コ蜿ー�コ�、雋ょウィ�ス邵コ蜉ア窶ウ邵コ�ス�ス�、郢ァ蜑�スク荵敖」郢ァ荵晢ソス繧�螺邵コ�ス邵コ蜉ア�ス竏オ諤呵抄蠑ア縲堤ケァ�ョinThreshold邵コ�セ邵コ�ァ //髫ェ閧イ�ョ蜉ア��邵コ貅假シ�邵コ髦ェ�櫁屐�、-(髫ェ閧イ�ョ蜉ア��邵コ貅假シ�邵コ髦ェ�櫁屐�、-隴幢ソス闖エ蠑ア�ス邵コ蜉ア窶ウ邵コ�ス�ス�、)*驕抵スコ驍�ソス negotiatingInfo.clearOpponentsBool();//闔��、雋り�諞セ隲キ荵晢ソス郢ァ�ッ郢晢スェ郢ァ�「 /*螯・蜊斐@縺吶℃縺ェ縺�h縺�↓菫ョ豁」縺吶k縺ォ縺ッ *逶ク謇九′蜊泌鴨逧�°髱槫鵠蜉帷噪縺九r蛻、譁ュ縺吶k蠢�ヲ√′縺ゅk縲� * 蜊泌鴨逧�°縺、雉帛酔竊偵%縺。繧峨�蠑キ豌励↓蜃コ縺ヲ繧ゅh縺� * 髱槫鵠蜉帷噪縺九▽雉帛酔竊偵%縺。繧峨�蠑ア豌励↓蜃コ縺溘⊇縺�′繧医> * */ //割引雇用の適用 threshold = threshold * Math.pow(df,time); //最低の値は守る。です。 if(threshold < minThreshold) threshold = minThreshold; // System.out.println("threshold:"+threshold); return threshold; } }