[1] | 1 | package agents.anac.y2015.ParsAgent;
|
---|
| 2 |
|
---|
| 3 | import java.util.ArrayList;
|
---|
| 4 | import java.util.HashMap;
|
---|
| 5 | import java.util.List;
|
---|
| 6 |
|
---|
| 7 | import genius.core.AgentID;
|
---|
| 8 | import genius.core.Bid;
|
---|
| 9 | import genius.core.actions.Accept;
|
---|
| 10 | import genius.core.actions.Action;
|
---|
| 11 | import genius.core.actions.Offer;
|
---|
| 12 | import genius.core.issue.Issue;
|
---|
| 13 | import genius.core.issue.IssueDiscrete;
|
---|
| 14 | import genius.core.issue.IssueInteger;
|
---|
| 15 | import genius.core.issue.Value;
|
---|
| 16 | import genius.core.issue.ValueInteger;
|
---|
| 17 | import genius.core.utility.AdditiveUtilitySpace;
|
---|
| 18 | import negotiator.parties.AbstractTimeDependentNegotiationParty;
|
---|
| 19 |
|
---|
| 20 | /**
|
---|
| 21 | * This is ParsAgent party.
|
---|
| 22 | */
|
---|
| 23 | public class ParsAgent extends AbstractTimeDependentNegotiationParty {
|
---|
| 24 | Bid lastBid;
|
---|
| 25 | Action lastAction;
|
---|
| 26 | String oppAName;
|
---|
| 27 | String oppBName;
|
---|
| 28 | int round;
|
---|
| 29 | double myutility = 0.8d;
|
---|
| 30 | boolean Imfirst = false;
|
---|
| 31 | Boolean withDiscount = null;
|
---|
| 32 | boolean fornullAgent = false;
|
---|
| 33 | ArrayList<BidUtility> opponentAB = new ArrayList<BidUtility>();
|
---|
| 34 | OpponentPreferences oppAPreferences = new OpponentPreferences();
|
---|
| 35 | OpponentPreferences oppBPreferences = new OpponentPreferences();
|
---|
| 36 |
|
---|
| 37 | /**
|
---|
| 38 | * Each round this method gets called and ask you to accept or offer. The
|
---|
| 39 | * first party in the first round is a bit different, it can only propose an
|
---|
| 40 | * offer.
|
---|
| 41 | *
|
---|
| 42 | * @param validActions
|
---|
| 43 | * Either a list containing both accept and offer or only offer.
|
---|
| 44 | * @return The chosen action.
|
---|
| 45 | */
|
---|
| 46 | @Override
|
---|
| 47 | public Action chooseAction(List<Class<? extends Action>> validActions) {
|
---|
| 48 |
|
---|
| 49 | try {
|
---|
| 50 | if (lastBid == null) {
|
---|
| 51 | Imfirst = true;
|
---|
| 52 | Bid b = getMybestBid(utilitySpace.getMaxUtilityBid(), 0);
|
---|
| 53 | return new Offer(getPartyId(), b);
|
---|
| 54 | } /*
|
---|
| 55 | * Comment for Bug else if (round == 0) { if (Imfirst) { return
|
---|
| 56 | * new Offer(getPartyId(),offerMyNewBid()); } else if
|
---|
| 57 | * (utilitySpace.getUtility(lastBid) > 0.6d) { return new
|
---|
| 58 | * Accept(getPartyId()); } }
|
---|
| 59 | */
|
---|
| 60 | else {
|
---|
| 61 | if (lastAction instanceof Accept) {
|
---|
| 62 | if (utilitySpace.getUtility(lastBid) > getMyutility()) {
|
---|
| 63 | return new Accept(getPartyId(), lastBid);
|
---|
| 64 | } else {
|
---|
| 65 | Bid b = offerMyNewBid();
|
---|
| 66 | return new Offer(getPartyId(), b);
|
---|
| 67 | }
|
---|
| 68 | } else {
|
---|
| 69 | if (utilitySpace.getUtility(lastBid) > getMyutility()) {
|
---|
| 70 | return new Accept(getPartyId(), lastBid);
|
---|
| 71 | } else {
|
---|
| 72 | Bid b = offerMyNewBid();
|
---|
| 73 | if (utilitySpace.getUtility(b) < getMyutility())
|
---|
| 74 | return new Offer(getPartyId(), getMybestBid(
|
---|
| 75 | utilitySpace.getMaxUtilityBid(), 0));
|
---|
| 76 | else
|
---|
| 77 | return new Offer(getPartyId(), b);
|
---|
| 78 |
|
---|
| 79 | }
|
---|
| 80 | }
|
---|
| 81 | }
|
---|
| 82 | } catch (Exception e) {
|
---|
| 83 | System.out.println("Error Occured " + e.getMessage());
|
---|
| 84 | }
|
---|
| 85 | Bid mb = null;
|
---|
| 86 | try {
|
---|
| 87 | mb = utilitySpace.getMaxUtilityBid();
|
---|
| 88 | return new Offer(getPartyId(), getMybestBid(mb, 0));
|
---|
| 89 | } catch (Exception e) {
|
---|
| 90 | try {
|
---|
| 91 | return new Offer(getPartyId(), mb);
|
---|
| 92 | } catch (Exception e2) {
|
---|
| 93 |
|
---|
| 94 | }
|
---|
| 95 | }
|
---|
| 96 | return new Accept(getPartyId(), lastBid);
|
---|
| 97 | }
|
---|
| 98 |
|
---|
| 99 | /**
|
---|
| 100 | * All offers proposed by the other parties will be received as a message.
|
---|
| 101 | * You can use this information to your advantage, for example to predict
|
---|
| 102 | * their utility.
|
---|
| 103 | *
|
---|
| 104 | * @param sender
|
---|
| 105 | * The party that did the action.
|
---|
| 106 | * @param action
|
---|
| 107 | * The action that party did.
|
---|
| 108 | */
|
---|
| 109 | @Override
|
---|
| 110 | public void receiveMessage(AgentID sender, Action action) {
|
---|
| 111 | super.receiveMessage(sender, action);
|
---|
| 112 | String agentName = sender == null ? "null" : sender.toString();
|
---|
| 113 | // action.getAgent() != null ? action.getAgent().toString() :
|
---|
| 114 | // fornullAgent ? "null1" : "null2";
|
---|
| 115 | fornullAgent = !fornullAgent;
|
---|
| 116 | if (action != null && action instanceof Offer) {
|
---|
| 117 | Bid newBid = ((Offer) action).getBid();
|
---|
| 118 | if (withDiscount == null) {
|
---|
| 119 | try {
|
---|
| 120 | if (utilitySpace.getUtilityWithDiscount(newBid,
|
---|
| 121 | timeline) != utilitySpace.getUtility(newBid)) {
|
---|
| 122 | withDiscount = Boolean.TRUE;
|
---|
| 123 | } else
|
---|
| 124 | withDiscount = Boolean.FALSE;
|
---|
| 125 | } catch (Exception e) {
|
---|
| 126 | System.out.println("Exception " + e.getMessage());
|
---|
| 127 | }
|
---|
| 128 | }
|
---|
| 129 | BidUtility opBid;
|
---|
| 130 | try {
|
---|
| 131 | opBid = new BidUtility(newBid, utilitySpace.getUtility(newBid),
|
---|
| 132 | System.currentTimeMillis());
|
---|
| 133 |
|
---|
| 134 | if (oppAName != null && oppAName.equals(agentName)) {
|
---|
| 135 | addBidToList(oppAPreferences.getOpponentBids(), opBid);
|
---|
| 136 |
|
---|
| 137 | } else if (oppBName != null && oppBName.equals(agentName)) {
|
---|
| 138 | addBidToList(oppBPreferences.getOpponentBids(), opBid);
|
---|
| 139 | } else if (oppAName == null) {
|
---|
| 140 | oppAName = agentName;
|
---|
| 141 | oppAPreferences.getOpponentBids().add(opBid);
|
---|
| 142 | } else if (oppBName == null) {
|
---|
| 143 | oppBName = agentName;
|
---|
| 144 | oppBPreferences.getOpponentBids().add(opBid);
|
---|
| 145 | }
|
---|
| 146 | calculateParamForOpponent((oppAName.equals(agentName)
|
---|
| 147 | ? oppAPreferences : oppBPreferences), newBid);
|
---|
| 148 | System.out.println("opp placed bid:" + newBid);
|
---|
| 149 | lastBid = newBid;
|
---|
| 150 | } catch (Exception e) {
|
---|
| 151 | e.printStackTrace();
|
---|
| 152 | }
|
---|
| 153 | } else if (action != null && action instanceof Accept) {
|
---|
| 154 | BidUtility opBid = null;
|
---|
| 155 | try {
|
---|
| 156 | opBid = new BidUtility(lastBid,
|
---|
| 157 | utilitySpace.getUtility(lastBid),
|
---|
| 158 | System.currentTimeMillis());
|
---|
| 159 | } catch (Exception e) {
|
---|
| 160 | System.out.println("Exception 44" + e.getMessage());
|
---|
| 161 | }
|
---|
| 162 | addBidToList(opponentAB, opBid);
|
---|
| 163 | }
|
---|
| 164 | lastAction = action;
|
---|
| 165 |
|
---|
| 166 | // Here you can listen to other parties' messages
|
---|
| 167 | }
|
---|
| 168 |
|
---|
| 169 | /**
|
---|
| 170 | * @param issueindex
|
---|
| 171 | * the issue for which we need the best value (index).
|
---|
| 172 | * @return the best value-index for issue <issueindex>. For integer values,
|
---|
| 173 | * returns the best value itself, no 'index'.
|
---|
| 174 | */
|
---|
| 175 | public int MyBestValue(int issueindex) {
|
---|
| 176 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 177 | Issue isu = dissues.get(issueindex);
|
---|
| 178 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
| 179 | double maxutil = 0d;
|
---|
| 180 | int maxvalIndex = 0;
|
---|
| 181 | try {
|
---|
| 182 | map = utilitySpace.getMaxUtilityBid().getValues();
|
---|
| 183 | } catch (Exception e) {
|
---|
| 184 | e.printStackTrace();
|
---|
| 185 | }
|
---|
| 186 | if (isu instanceof IssueDiscrete) {
|
---|
| 187 | IssueDiscrete is = (IssueDiscrete) isu;
|
---|
| 188 |
|
---|
| 189 | // Bizarre way to get the value-index of this issue in the max-util
|
---|
| 190 | // bid?
|
---|
| 191 | for (int num = 0; num < is.getNumberOfValues(); ++num) {
|
---|
| 192 | map.put(new Integer(issueindex + 1), is.getValue(num));
|
---|
| 193 | Bid temp;
|
---|
| 194 | double u = 0d;
|
---|
| 195 | try {
|
---|
| 196 | temp = new Bid(utilitySpace.getDomain(), map);
|
---|
| 197 | u = utilitySpace.getUtility(temp);
|
---|
| 198 | } catch (Exception e) {
|
---|
| 199 | e.printStackTrace();
|
---|
| 200 | }
|
---|
| 201 | if (u > maxutil) {
|
---|
| 202 | maxutil = u;
|
---|
| 203 | maxvalIndex = num;
|
---|
| 204 | }
|
---|
| 205 | break;
|
---|
| 206 |
|
---|
| 207 | }
|
---|
| 208 | } else if (isu instanceof IssueInteger) {
|
---|
| 209 | if (map != null) {
|
---|
| 210 | // +1 because the map has first issue = 1.
|
---|
| 211 | return ((ValueInteger) map.get(issueindex + 1)).getValue();
|
---|
| 212 | }
|
---|
| 213 | }
|
---|
| 214 | return maxvalIndex;
|
---|
| 215 | }
|
---|
| 216 |
|
---|
| 217 | /**
|
---|
| 218 | * @return a next bid.
|
---|
| 219 | */
|
---|
| 220 | public Bid offerMyNewBid() {
|
---|
| 221 | Bid bidNN = null;
|
---|
| 222 | if (opponentAB != null && opponentAB.size() != 0)
|
---|
| 223 | bidNN = getNNBid(opponentAB);
|
---|
| 224 | try {
|
---|
| 225 | if (bidNN == null
|
---|
| 226 | || utilitySpace.getUtility(bidNN) < getMyutility()) {
|
---|
| 227 | List<List<Object>> isues = getMutualIssues();
|
---|
| 228 | HashMap<Integer, Value> map = new HashMap<Integer, Value>();
|
---|
| 229 | Bid bid;
|
---|
| 230 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 231 | for (int i = 0; i < isues.size(); ++i) {
|
---|
| 232 | List<Object> keyVal = isues.get(i);
|
---|
| 233 |
|
---|
| 234 | Issue dissue = dissues.get(i);
|
---|
| 235 | if (dissue instanceof IssueDiscrete) {
|
---|
| 236 | if (keyVal != null) {
|
---|
| 237 | IssueDiscrete is = (IssueDiscrete) dissues.get(i);
|
---|
| 238 | // search the value that matches keyVal(0) and put
|
---|
| 239 | // in map.
|
---|
| 240 | // fails silently!
|
---|
| 241 | for (int num = 0; num < is
|
---|
| 242 | .getNumberOfValues(); ++num) {
|
---|
| 243 | if (is.getValue(num).toString()
|
---|
| 244 | .equals(keyVal.get(0).toString())) {
|
---|
| 245 | map.put(new Integer(i + 1),
|
---|
| 246 | is.getValue(num));
|
---|
| 247 | break;
|
---|
| 248 | }
|
---|
| 249 |
|
---|
| 250 | }
|
---|
| 251 | } else { // keyVal == null
|
---|
| 252 | IssueDiscrete is = (IssueDiscrete) dissues.get(i);
|
---|
| 253 | map.put(new Integer(i + 1),
|
---|
| 254 | is.getValue(MyBestValue(i)));
|
---|
| 255 | }
|
---|
| 256 | } else if (dissue instanceof IssueInteger) {
|
---|
| 257 | if (keyVal != null) {
|
---|
| 258 | map.put(new Integer(i + 1),
|
---|
| 259 | (ValueInteger) keyVal.get(0));
|
---|
| 260 | } else { // keyVal==null
|
---|
| 261 | // IssueInteger is = (IssueInteger) dissues.get(i);
|
---|
| 262 | map.put(i + 1, new ValueInteger(MyBestValue(i)));
|
---|
| 263 | }
|
---|
| 264 | } else {
|
---|
| 265 | throw new IllegalStateException(
|
---|
| 266 | "not supported issue " + dissue);
|
---|
| 267 | }
|
---|
| 268 |
|
---|
| 269 | }
|
---|
| 270 | try {
|
---|
| 271 | bid = new Bid(utilitySpace.getDomain(),
|
---|
| 272 | (HashMap) map.clone());
|
---|
| 273 | if (utilitySpace.getUtility(bid) > getMyutility())
|
---|
| 274 | return bid;
|
---|
| 275 | else {
|
---|
| 276 | return getMybestBid(utilitySpace.getMaxUtilityBid(), 0);
|
---|
| 277 | }
|
---|
| 278 | } catch (Exception e) {
|
---|
| 279 | System.out.println("Exception 55 " + e.getMessage());
|
---|
| 280 | }
|
---|
| 281 | } else
|
---|
| 282 | return bidNN;
|
---|
| 283 | } catch (Exception e) {
|
---|
| 284 | e.printStackTrace();
|
---|
| 285 | }
|
---|
| 286 | return null;
|
---|
| 287 | }
|
---|
| 288 |
|
---|
| 289 | /**
|
---|
| 290 | * Seems that this determines for each issue the top-2 of occuring values.
|
---|
| 291 | *
|
---|
| 292 | * @return list of <issue, maxval1, maxval2 > triplets (triplets
|
---|
| 293 | * encoded as List<Object>...). maxval1 is mostly used value;
|
---|
| 294 | * maxval2 is one-but-mostly used.
|
---|
| 295 | */
|
---|
| 296 | public List<List<Object>> getMutualIssues() {
|
---|
| 297 | List<List<Object>> mutualList = new ArrayList<List<Object>>();
|
---|
| 298 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 299 | int twocycle = 2;
|
---|
| 300 | while (twocycle > 0) {
|
---|
| 301 | mutualList = new ArrayList<List<Object>>();
|
---|
| 302 | for (int i = 0; i < dissues.size(); ++i) {
|
---|
| 303 | updateMutualList(mutualList, dissues, twocycle, i);
|
---|
| 304 | if (((HashMap) oppAPreferences.getRepeatedissue()
|
---|
| 305 | .get(dissues.get(i).getName())).size() == 0
|
---|
| 306 | || ((HashMap) oppAPreferences.getRepeatedissue()
|
---|
| 307 | .get(dissues.get(i).getName())).size() == 0) {
|
---|
| 308 | twocycle--;
|
---|
| 309 | }
|
---|
| 310 | }
|
---|
| 311 | if (twocycle != 0) {
|
---|
| 312 | twocycle--;
|
---|
| 313 | if (opponentAB.size() == 0) {
|
---|
| 314 | float nullval = 0.0f;
|
---|
| 315 | for (int i = 0; i < mutualList.size(); ++i) {
|
---|
| 316 | if (mutualList.get(i) != null) {
|
---|
| 317 | ++nullval;
|
---|
| 318 | }
|
---|
| 319 | }
|
---|
| 320 |
|
---|
| 321 | nullval = nullval / mutualList.size();
|
---|
| 322 | if (nullval >= 0.5)
|
---|
| 323 | twocycle--;
|
---|
| 324 | } else
|
---|
| 325 | twocycle--;
|
---|
| 326 | }
|
---|
| 327 | }
|
---|
| 328 | return mutualList;
|
---|
| 329 | }
|
---|
| 330 |
|
---|
| 331 | /**
|
---|
| 332 | * Search two highest repeated issues for each issue
|
---|
| 333 | *
|
---|
| 334 | * @param mutualList
|
---|
| 335 | * @param dissues
|
---|
| 336 | * @param twocycle
|
---|
| 337 | * @param i
|
---|
| 338 | */
|
---|
| 339 | private void updateMutualList(List<List<Object>> mutualList,
|
---|
| 340 | List<Issue> dissues, int twocycle, int i) {
|
---|
| 341 | if (oppAPreferences.getRepeatedissue()
|
---|
| 342 | .get(dissues.get(i).getName()) != null) {
|
---|
| 343 | HashMap<Value, Integer> vals = oppAPreferences.getRepeatedissue()
|
---|
| 344 | .get(dissues.get(i).getName());
|
---|
| 345 | HashMap<Value, Integer> valsB = oppBPreferences.getRepeatedissue()
|
---|
| 346 | .get(dissues.get(i).getName());
|
---|
| 347 |
|
---|
| 348 | Object[] keys = vals.keySet().toArray();
|
---|
| 349 | int[] max = new int[] { 0, 0 };
|
---|
| 350 | Object[] maxkey = new Object[] { null, null };
|
---|
| 351 | for (int j = 0; j < keys.length; ++j) {
|
---|
| 352 | Integer temp = vals.get(keys[j]);
|
---|
| 353 | if (temp.intValue() > max[0]) {
|
---|
| 354 | max[0] = temp.intValue();
|
---|
| 355 | maxkey[0] = keys[j];
|
---|
| 356 | } else if (temp.intValue() > max[1]) {
|
---|
| 357 | max[1] = temp.intValue();
|
---|
| 358 | maxkey[1] = keys[j];
|
---|
| 359 | }
|
---|
| 360 | }
|
---|
| 361 | if (valsB != null) {
|
---|
| 362 | Object[] keysB = valsB.keySet().toArray();
|
---|
| 363 | int[] maxB = new int[] { 0, 0 };
|
---|
| 364 | ;
|
---|
| 365 | Object[] maxkeyB = new Object[] { null, null };
|
---|
| 366 | for (int j = 0; j < keysB.length; ++j) {
|
---|
| 367 | Integer temp = valsB.get(keysB[j]);
|
---|
| 368 | if (temp.intValue() > maxB[0]) {
|
---|
| 369 | maxB[0] = temp.intValue();
|
---|
| 370 | maxkeyB[0] = keysB[j];
|
---|
| 371 | } else if (temp.intValue() > maxB[1]) {
|
---|
| 372 | maxB[1] = temp.intValue();
|
---|
| 373 | maxkeyB[1] = keysB[j];
|
---|
| 374 | }
|
---|
| 375 | }
|
---|
| 376 | if (twocycle == 2) {
|
---|
| 377 | if (maxkey[0] != null && maxkeyB[0] != null
|
---|
| 378 | && maxkey[0].equals(maxkeyB[0])) {
|
---|
| 379 | ArrayList<Object> l = new ArrayList();
|
---|
| 380 | l.add(maxkey[0]);
|
---|
| 381 | l.add(maxB[0]);
|
---|
| 382 | l.add(max[0]);
|
---|
| 383 | mutualList.add(i, l);
|
---|
| 384 | } else
|
---|
| 385 | mutualList.add(i, null);
|
---|
| 386 | } else {
|
---|
| 387 | boolean insideloop = true;
|
---|
| 388 | for (int m = 0; insideloop && m < 2; ++m) {
|
---|
| 389 | for (int z = 0; insideloop && z < 2; ++z) {
|
---|
| 390 | if (maxkey[m] != null && maxkeyB[z] != null
|
---|
| 391 | && maxkey[m].equals(maxkeyB[z])) {
|
---|
| 392 | ArrayList<Object> l = new ArrayList();
|
---|
| 393 | l.add(maxkey[m]);
|
---|
| 394 | l.add(maxB[z]);
|
---|
| 395 | l.add(max[m]);
|
---|
| 396 | mutualList.add(i, l);
|
---|
| 397 | insideloop = false;
|
---|
| 398 | }
|
---|
| 399 | }
|
---|
| 400 | }
|
---|
| 401 | if (insideloop)
|
---|
| 402 | mutualList.add(i, null);
|
---|
| 403 |
|
---|
| 404 | }
|
---|
| 405 | } else {
|
---|
| 406 | mutualList.add(i, null);
|
---|
| 407 | oppBPreferences.getRepeatedissue().put(dissues.get(i).getName(),
|
---|
| 408 | new HashMap());
|
---|
| 409 | }
|
---|
| 410 | } else {
|
---|
| 411 | oppAPreferences.getRepeatedissue().put(dissues.get(i).getName(),
|
---|
| 412 | new HashMap());
|
---|
| 413 | mutualList.add(i, null);
|
---|
| 414 | }
|
---|
| 415 | }
|
---|
| 416 |
|
---|
| 417 | public Bid getNNBid(ArrayList<BidUtility> oppAB) {
|
---|
| 418 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 419 | Bid maxBid = null;
|
---|
| 420 | double maxutility = 0d;
|
---|
| 421 | int size = 0;
|
---|
| 422 | int exloop = 0;
|
---|
| 423 | Bid newBid;
|
---|
| 424 | while (exloop < dissues.size()) {
|
---|
| 425 | int bi = chooseBestIssue();
|
---|
| 426 | size = 0;
|
---|
| 427 | while (oppAB != null && oppAB.size() > size) {
|
---|
| 428 | Bid b = oppAB.get(size).getBid();
|
---|
| 429 | newBid = new Bid(b);
|
---|
| 430 | try {
|
---|
| 431 | HashMap vals = b.getValues();
|
---|
| 432 | vals.put(bi, getRandomValue(dissues.get(bi - 1)));
|
---|
| 433 | newBid = new Bid(utilitySpace.getDomain(), vals);
|
---|
| 434 | if (utilitySpace.getUtility(newBid) > getMyutility()
|
---|
| 435 | && utilitySpace.getUtility(newBid) > maxutility) {
|
---|
| 436 | maxBid = new Bid(newBid);
|
---|
| 437 | maxutility = utilitySpace.getUtility(maxBid);
|
---|
| 438 | }
|
---|
| 439 |
|
---|
| 440 | } catch (Exception e) {
|
---|
| 441 | System.out.println("Exception 66 " + e.getMessage());
|
---|
| 442 | }
|
---|
| 443 | size++;
|
---|
| 444 | }
|
---|
| 445 | exloop++;
|
---|
| 446 | }
|
---|
| 447 | return maxBid;
|
---|
| 448 | }
|
---|
| 449 |
|
---|
| 450 | public int chooseBestIssue() {
|
---|
| 451 | double random = Math.random();
|
---|
| 452 | double sumWeight = 0d;
|
---|
| 453 | AdditiveUtilitySpace utilitySpace1 = (AdditiveUtilitySpace) utilitySpace;
|
---|
| 454 |
|
---|
| 455 | for (int i = utilitySpace1.getDomain().getIssues().size(); i > 0; --i) {
|
---|
| 456 | sumWeight += utilitySpace1.getWeight(i);
|
---|
| 457 | if (sumWeight > random)
|
---|
| 458 | return i;
|
---|
| 459 | }
|
---|
| 460 | return 0;
|
---|
| 461 | }
|
---|
| 462 |
|
---|
| 463 | public int chooseWorstIssue() {
|
---|
| 464 | double random = Math.random() * 100;
|
---|
| 465 | double sumWeight = 0d;
|
---|
| 466 | int minin = 1;
|
---|
| 467 | double min = 1.0d;
|
---|
| 468 | AdditiveUtilitySpace utilitySpace1 = (AdditiveUtilitySpace) utilitySpace;
|
---|
| 469 | for (int i = utilitySpace1.getDomain().getIssues().size(); i > 0; --i) {
|
---|
| 470 | sumWeight += 1.0d / utilitySpace1.getWeight(i);
|
---|
| 471 | if (utilitySpace1.getWeight(i) < min) {
|
---|
| 472 | min = utilitySpace1.getWeight(i);
|
---|
| 473 | minin = i;
|
---|
| 474 | }
|
---|
| 475 | if (sumWeight > random)
|
---|
| 476 | return i;
|
---|
| 477 | }
|
---|
| 478 | return minin;
|
---|
| 479 | }
|
---|
| 480 |
|
---|
| 481 | public Bid getMybestBid(Bid sugestBid, int time) {
|
---|
| 482 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 483 | Bid newBid = new Bid(sugestBid);
|
---|
| 484 | int index = chooseWorstIssue();
|
---|
| 485 | boolean loop = true;
|
---|
| 486 | long bidTime = System.currentTimeMillis();
|
---|
| 487 | while (loop) {
|
---|
| 488 | if ((System.currentTimeMillis() - bidTime) * 1000 > 3)
|
---|
| 489 | break;
|
---|
| 490 | newBid = new Bid(sugestBid);
|
---|
| 491 | try {
|
---|
| 492 | HashMap map = newBid.getValues();
|
---|
| 493 | map.put(index, getRandomValue(dissues.get(index - 1)));
|
---|
| 494 | newBid = new Bid(utilitySpace.getDomain(), map);
|
---|
| 495 | if (utilitySpace.getUtility(newBid) > getMyutility()) {
|
---|
| 496 | return newBid;
|
---|
| 497 | }
|
---|
| 498 | } catch (Exception e) {
|
---|
| 499 | // System.out.println("Exception in my best bid : " +
|
---|
| 500 | // e.getMessage());
|
---|
| 501 | loop = false;
|
---|
| 502 | }
|
---|
| 503 | }
|
---|
| 504 | return newBid;
|
---|
| 505 | }
|
---|
| 506 |
|
---|
| 507 | public void addBidToList(ArrayList<BidUtility> mybids, BidUtility newbid) {
|
---|
| 508 | int index = mybids.size();
|
---|
| 509 | for (int i = 0; i < mybids.size(); ++i) {
|
---|
| 510 | if (mybids.get(i).getUtility() <= newbid.getUtility()) {
|
---|
| 511 | if (!mybids.get(i).getBid().equals(newbid.getBid()))
|
---|
| 512 | index = i;
|
---|
| 513 | else
|
---|
| 514 | return;
|
---|
| 515 | }
|
---|
| 516 | }
|
---|
| 517 | mybids.add(index, newbid);
|
---|
| 518 |
|
---|
| 519 | }
|
---|
| 520 |
|
---|
| 521 | /**
|
---|
| 522 | * Updates the opponent preferences model. Basically updates the number of
|
---|
| 523 | * times the issue values occurred.
|
---|
| 524 | *
|
---|
| 525 | * @param op
|
---|
| 526 | * @param bid
|
---|
| 527 | */
|
---|
| 528 | public void calculateParamForOpponent(OpponentPreferences op, Bid bid) {
|
---|
| 529 | List<Issue> dissues = utilitySpace.getDomain().getIssues();
|
---|
| 530 | HashMap<Integer, Value> bidVal = bid.getValues();
|
---|
| 531 | Integer[] keys = new Integer[0];
|
---|
| 532 | keys = bidVal.keySet().toArray(keys);
|
---|
| 533 |
|
---|
| 534 | for (int i = 0; i < dissues.size(); ++i) {
|
---|
| 535 | if (op.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
| 536 |
|
---|
| 537 | HashMap<Value, Integer> vals = op.getRepeatedissue()
|
---|
| 538 | .get(dissues.get(i).getName());
|
---|
| 539 |
|
---|
| 540 | try {
|
---|
| 541 | if (vals.get(bidVal.get(keys[i])) != null) {
|
---|
| 542 | Integer repet = vals.get(bidVal.get(keys[i]));
|
---|
| 543 | repet = repet + 1;
|
---|
| 544 | vals.put(bidVal.get(keys[i]), repet);
|
---|
| 545 | } else {
|
---|
| 546 | vals.put(bidVal.get(keys[i]), new Integer(1));
|
---|
| 547 | }
|
---|
| 548 | } catch (Exception e) {
|
---|
| 549 | // System.out.println("Exception 88 " + e.getMessage());
|
---|
| 550 | }
|
---|
| 551 | } else {
|
---|
| 552 | HashMap<Value, Integer> h = new HashMap<Value, Integer>();
|
---|
| 553 | // op.getRepeatedissue().get(dissues.get(i).getName());
|
---|
| 554 | try {
|
---|
| 555 |
|
---|
| 556 | h.put(bidVal.get(keys[i]), new Integer(1));
|
---|
| 557 | } catch (Exception e) {
|
---|
| 558 | // System.out.println("Exception 99 " + e.getMessage());
|
---|
| 559 | }
|
---|
| 560 | op.getRepeatedissue().put(dissues.get(i).getName(), h);
|
---|
| 561 | }
|
---|
| 562 | }
|
---|
| 563 |
|
---|
| 564 | }
|
---|
| 565 |
|
---|
| 566 | public void setMyutility(double myutility) {
|
---|
| 567 | this.myutility = myutility;
|
---|
| 568 | }
|
---|
| 569 |
|
---|
| 570 | public double getMyutility() {
|
---|
| 571 | myutility = getTargetUtility();
|
---|
| 572 | if (myutility < 0.7)
|
---|
| 573 | return 0.7d;
|
---|
| 574 | return myutility;
|
---|
| 575 | }
|
---|
| 576 |
|
---|
| 577 | @Override
|
---|
| 578 | public double getE() {
|
---|
| 579 | if (withDiscount)
|
---|
| 580 | return 0.20d;
|
---|
| 581 | return 0.15d;
|
---|
| 582 | }
|
---|
| 583 |
|
---|
| 584 | private class OpponentPreferences {
|
---|
| 585 | /**
|
---|
| 586 | * map with number of times an issue values occurred in an opponent bid.
|
---|
| 587 | */
|
---|
| 588 | private HashMap<String, HashMap<Value, Integer>> repeatedissue = new HashMap();
|
---|
| 589 | private ArrayList selectedValues;
|
---|
| 590 | ArrayList<BidUtility> opponentBids = new ArrayList<BidUtility>();
|
---|
| 591 |
|
---|
| 592 | /**
|
---|
| 593 | * actually, not used. Code modifies map returned from
|
---|
| 594 | * {@link #getRepeatedissue()} directly.
|
---|
| 595 | *
|
---|
| 596 | * @param repeatedissue
|
---|
| 597 | */
|
---|
| 598 | public void setRepeatedissue(
|
---|
| 599 | HashMap<String, HashMap<Value, Integer>> repeatedissue) {
|
---|
| 600 | this.repeatedissue = repeatedissue;
|
---|
| 601 | }
|
---|
| 602 |
|
---|
| 603 | /**
|
---|
| 604 | * @return map with number of times an issue values occurred in an
|
---|
| 605 | * opponent bid
|
---|
| 606 | */
|
---|
| 607 | public HashMap<String, HashMap<Value, Integer>> getRepeatedissue() {
|
---|
| 608 | return repeatedissue;
|
---|
| 609 | }
|
---|
| 610 |
|
---|
| 611 | public void setSelectedValues(ArrayList selectedValues) {
|
---|
| 612 | this.selectedValues = selectedValues;
|
---|
| 613 | }
|
---|
| 614 |
|
---|
| 615 | public ArrayList getSelectedValues() {
|
---|
| 616 | return selectedValues;
|
---|
| 617 | }
|
---|
| 618 |
|
---|
| 619 | public void setOpponentBids(
|
---|
| 620 | ArrayList<ParsAgent.BidUtility> opponentBids) {
|
---|
| 621 | this.opponentBids = opponentBids;
|
---|
| 622 | }
|
---|
| 623 |
|
---|
| 624 | public ArrayList<ParsAgent.BidUtility> getOpponentBids() {
|
---|
| 625 | return opponentBids;
|
---|
| 626 | }
|
---|
| 627 | }
|
---|
| 628 |
|
---|
| 629 | private class BidUtility {
|
---|
| 630 | private Bid bid;
|
---|
| 631 | private double utility;
|
---|
| 632 | private long time;
|
---|
| 633 |
|
---|
| 634 | BidUtility(Bid b, double u, long t) {
|
---|
| 635 | this.bid = b;
|
---|
| 636 | this.utility = u;
|
---|
| 637 | this.time = t;
|
---|
| 638 | }
|
---|
| 639 |
|
---|
| 640 | BidUtility(BidUtility newbid) {
|
---|
| 641 | this.bid = newbid.getBid();
|
---|
| 642 | this.utility = newbid.getUtility();
|
---|
| 643 | this.time = newbid.getTime();
|
---|
| 644 | }
|
---|
| 645 |
|
---|
| 646 | public void setBid(Bid bid) {
|
---|
| 647 | this.bid = bid;
|
---|
| 648 | }
|
---|
| 649 |
|
---|
| 650 | public Bid getBid() {
|
---|
| 651 | return bid;
|
---|
| 652 | }
|
---|
| 653 |
|
---|
| 654 | public void setUtility(double utility) {
|
---|
| 655 | this.utility = utility;
|
---|
| 656 | }
|
---|
| 657 |
|
---|
| 658 | public double getUtility() {
|
---|
| 659 | return utility;
|
---|
| 660 | }
|
---|
| 661 |
|
---|
| 662 | public void setTime(long time) {
|
---|
| 663 | this.time = time;
|
---|
| 664 | }
|
---|
| 665 |
|
---|
| 666 | public long getTime() {
|
---|
| 667 | return time;
|
---|
| 668 | }
|
---|
| 669 | }
|
---|
| 670 |
|
---|
| 671 | @Override
|
---|
| 672 | public String getDescription() {
|
---|
| 673 | return "ANAC2015";
|
---|
| 674 | }
|
---|
| 675 |
|
---|
| 676 | }
|
---|
| 677 |
|
---|
| 678 | /*
|
---|
| 679 | * package negotiator.ui;
|
---|
| 680 | *
|
---|
| 681 | * import java.util.ArrayList; import java.util.HashMap; import java.util.List;
|
---|
| 682 | * import java.util.Map; import java.util.Vector; import negotiator.Bid; import
|
---|
| 683 | * negotiator.DeadlineType; import negotiator.Timeline; import
|
---|
| 684 | * negotiator.actions.Accept; import negotiator.actions.Action; import
|
---|
| 685 | * negotiator.actions.Offer; import negotiator.issue.Issue; import
|
---|
| 686 | * negotiator.issue.IssueDiscrete; import negotiator.issue.IssueInteger; import
|
---|
| 687 | * negotiator.issue.IssueReal; import negotiator.issue.Objective; import
|
---|
| 688 | * negotiator.issue.Value; import negotiator.issue.ValueInteger; import
|
---|
| 689 | * negotiator.issue.ValueReal; import
|
---|
| 690 | * negotiator.parties.AbstractNegotiationParty; import
|
---|
| 691 | * negotiator.parties.AbstractTimeDependentNegotiationParty; import
|
---|
| 692 | * negotiator.utility.UtilitySpace;
|
---|
| 693 | *
|
---|
| 694 | *
|
---|
| 695 | * public class ParsAgent extends AbstractTimeDependentNegotiationParty { Bid
|
---|
| 696 | * lastBid; Action lastAction; String oppAName; String oppBName; int round;
|
---|
| 697 | * double myutility = 0.8d; boolean Imfirst = false; Boolean withDiscount =
|
---|
| 698 | * null; boolean fornullAgent = false; ArrayList<BidUtility> opponentAB = new
|
---|
| 699 | * ArrayList<BidUtility>(); OpponentPreferences oppAPreferences = new
|
---|
| 700 | * OpponentPreferences(); OpponentPreferences oppBPreferences = new
|
---|
| 701 | * OpponentPreferences(); // boolean myturn;
|
---|
| 702 | *
|
---|
| 703 | *
|
---|
| 704 | * public ParsAgent(UtilitySpace utilitySpace, Map<DeadlineType, Object>
|
---|
| 705 | * deadlines, Timeline timeline, long randomSeed) { // Make sure that this
|
---|
| 706 | * constructor calls it's parent. super(utilitySpace, deadlines, timeline,
|
---|
| 707 | * randomSeed); // Object[] keys = deadlines.keySet().toArray(); // for (int i =
|
---|
| 708 | * 0; i < keys.length; ++i) { // System.out.println("keys[i] ==== "+keys[i]);
|
---|
| 709 | * // if (keys[i] instanceof DeadlineType) { // // round =
|
---|
| 710 | * Integer.parseInt(deadlines.get(keys[i]).toString()); //
|
---|
| 711 | * System.out.println("round ====== "+round); // } // }
|
---|
| 712 | *
|
---|
| 713 | *
|
---|
| 714 | * }
|
---|
| 715 | *
|
---|
| 716 | *
|
---|
| 717 | * @Override public Action chooseAction(List<Class> validActions) { //
|
---|
| 718 | * myturn=true; round--; try { if (lastBid == null) { Imfirst = true; Bid b =
|
---|
| 719 | * getMybestBid(utilitySpace.getMaxUtilityBid(), 0); return new
|
---|
| 720 | * Offer(getPartyId(), b); } else if (round == 0) { if (Imfirst) { return new
|
---|
| 721 | * Offer(getPartyId(),offerMyNewBid()); } else if
|
---|
| 722 | * (utilitySpace.getUtility(lastBid) > 0.6d) { return new Accept(getPartyId());
|
---|
| 723 | * } } else { if (lastAction instanceof Accept) { if
|
---|
| 724 | * (utilitySpace.getUtility(lastBid) > getMyutility()) { return new
|
---|
| 725 | * Accept(getPartyId()); } else { Bid b = offerMyNewBid(); return new
|
---|
| 726 | * Offer(getPartyId(),b); } } else { if (utilitySpace.getUtility(lastBid) >
|
---|
| 727 | * getMyutility()) { return new Accept(getPartyId()); } else { Bid b =
|
---|
| 728 | * offerMyNewBid(); if (utilitySpace.getUtility(b) < getMyutility()) return new
|
---|
| 729 | * Offer(getPartyId(),getMybestBid(utilitySpace.getMaxUtilityBid(), 0)); else
|
---|
| 730 | * return new Offer(getPartyId(),b);
|
---|
| 731 | *
|
---|
| 732 | * } } } } catch (Exception e) { System.out.println("Error Occured " +
|
---|
| 733 | * e.getMessage()); } Bid mb = null; try { mb = utilitySpace.getMaxUtilityBid();
|
---|
| 734 | * return new Offer(getPartyId(),getMybestBid(mb, 0)); } catch (Exception e) {
|
---|
| 735 | * try { return new Offer(getPartyId(),mb); } catch (Exception e2) {
|
---|
| 736 | *
|
---|
| 737 | * } } return new Accept(getPartyId()); }
|
---|
| 738 | *
|
---|
| 739 | *
|
---|
| 740 | * @Override public void receiveMessage(Object sender, Action action ) {
|
---|
| 741 | * super.receiveMessage(sender, action); String agentName =sender.toString();
|
---|
| 742 | * fornullAgent = !fornullAgent; if (action != null && action instanceof Offer)
|
---|
| 743 | * { // myturn=false; Bid newBid = ((Offer)action).getBid(); if (withDiscount ==
|
---|
| 744 | * null) { try { if (utilitySpace.getUtilityWithDiscount(newBid, timeline) !=
|
---|
| 745 | * utilitySpace.getUtility(newBid)) { withDiscount = Boolean.TRUE; } else
|
---|
| 746 | * withDiscount = Boolean.FALSE; } catch (Exception e) {
|
---|
| 747 | * System.out.println("Exception " + e.getMessage()); } } BidUtility opBid; try
|
---|
| 748 | * { opBid = new BidUtility(newBid, utilitySpace.getUtility(newBid),
|
---|
| 749 | * System.currentTimeMillis());
|
---|
| 750 | *
|
---|
| 751 | * if (oppAName != null && oppAName.equals(agentName)) {
|
---|
| 752 | * addBidToList(oppAPreferences.getOpponentBids(), opBid);
|
---|
| 753 | *
|
---|
| 754 | * } else if (oppBName != null && oppBName.equals(agentName)) {
|
---|
| 755 | * addBidToList(oppBPreferences.getOpponentBids(), opBid); } else if (oppAName
|
---|
| 756 | * == null) { oppAName = agentName;
|
---|
| 757 | * oppAPreferences.getOpponentBids().add(opBid); } else if (oppBName == null) {
|
---|
| 758 | * oppBName = agentName; oppBPreferences.getOpponentBids().add(opBid); }
|
---|
| 759 | * calculateParamForOpponent((oppAName.equals(agentName) ? oppAPreferences :
|
---|
| 760 | * oppBPreferences), newBid); lastBid = newBid; } catch (Exception e) { //
|
---|
| 761 | * System.out.println("Exception 33 " + e.getMessage()); } } else if (action !=
|
---|
| 762 | * null && action instanceof Accept ) { //&& !myturn BidUtility opBid = null;
|
---|
| 763 | * try { opBid = new BidUtility(lastBid, utilitySpace.getUtility(lastBid),
|
---|
| 764 | * System.currentTimeMillis()); } catch (Exception e) { //
|
---|
| 765 | * System.out.println("Exception 44" + e.getMessage()); }
|
---|
| 766 | * addBidToList(opponentAB, opBid); } lastAction = action;
|
---|
| 767 | *
|
---|
| 768 | * // Here you can listen to other parties' messages }
|
---|
| 769 | *
|
---|
| 770 | * public int MyBestValue(int issueindex) { ArrayList<Issue> dissues =
|
---|
| 771 | * utilitySpace.getDomain().getIssues(); Issue isu = dissues.get(issueindex);
|
---|
| 772 | * HashMap map = new HashMap(); double maxutil = 0d; int maxvalIndex = 0; try {
|
---|
| 773 | * map = utilitySpace.getMaxUtilityBid().getValues(); } catch (Exception e) {
|
---|
| 774 | * System.out.println("Exception 3323 " + e.getMessage()); } if (isu instanceof
|
---|
| 775 | * IssueDiscrete) { IssueDiscrete is = (IssueDiscrete)isu; for (int num = 0; num
|
---|
| 776 | * < is.getNumberOfValues(); ++num) { map.put(new Integer(issueindex + 1),
|
---|
| 777 | * is.getValue(num)); Bid temp; double u = 0d; try { temp = new
|
---|
| 778 | * Bid(utilitySpace.getDomain(), map); u = utilitySpace.getUtility(temp); }
|
---|
| 779 | * catch (Exception e) { System.out.println("Exception 98989 " +
|
---|
| 780 | * e.getMessage()); } if (u > maxutil) { maxutil = u; maxvalIndex = num; }
|
---|
| 781 | * break;
|
---|
| 782 | *
|
---|
| 783 | *
|
---|
| 784 | * } } return maxvalIndex; }
|
---|
| 785 | *
|
---|
| 786 | * public Bid offerMyNewBid() { Bid bidNN = null; if (opponentAB != null &&
|
---|
| 787 | * opponentAB.size() != 0) bidNN = getNNBid(opponentAB); try { if (bidNN == null
|
---|
| 788 | * || utilitySpace.getUtility(bidNN) < getMyutility()) { ArrayList isues =
|
---|
| 789 | * getMutualIssues(); HashMap map = new HashMap(); Bid bid; ArrayList<Issue>
|
---|
| 790 | * dissues = utilitySpace.getDomain().getIssues(); for (int i = 0; i <
|
---|
| 791 | * isues.size(); ++i) { ArrayList keyVal = (ArrayList)isues.get(i); if (keyVal
|
---|
| 792 | * != null && dissues.get(i) instanceof IssueDiscrete) { IssueDiscrete is =
|
---|
| 793 | * (IssueDiscrete)dissues.get(i); for (int num = 0; num <
|
---|
| 794 | * is.getNumberOfValues(); ++num) { if
|
---|
| 795 | * (is.getValue(num).toString().equals(keyVal.get(0).toString())) { map.put(new
|
---|
| 796 | * Integer(i + 1), is.getValue(num)); break; }
|
---|
| 797 | *
|
---|
| 798 | * }
|
---|
| 799 | *
|
---|
| 800 | * } else if (keyVal == null && dissues.get(i) instanceof IssueDiscrete) {
|
---|
| 801 | * IssueDiscrete is = (IssueDiscrete)dissues.get(i); map.put(new Integer(i + 1),
|
---|
| 802 | * is.getValue(MyBestValue(i)));
|
---|
| 803 | *
|
---|
| 804 | * } else if (keyVal != null) { map.put(new Integer(i + 1), keyVal.get(0)); }
|
---|
| 805 | *
|
---|
| 806 | * } try { bid = new Bid(utilitySpace.getDomain(), (HashMap)map.clone()); if
|
---|
| 807 | * (utilitySpace.getUtility(bid) > getMyutility()) return bid; else return
|
---|
| 808 | * getMybestBid(utilitySpace.getMaxUtilityBid(), 0); } catch (Exception e) {
|
---|
| 809 | * System.out.println("Exception 55 " + e.getMessage()); } } else return bidNN;
|
---|
| 810 | * } catch (Exception e) { // System.out.println("Exception 121212 == " +
|
---|
| 811 | * e.getMessage()); } return null; }
|
---|
| 812 | *
|
---|
| 813 | * public ArrayList getMutualIssues() { ArrayList mutualList = new ArrayList();
|
---|
| 814 | * ArrayList<Issue> dissues = utilitySpace.getDomain().getIssues(); int twocycle
|
---|
| 815 | * = 2; while (twocycle > 0) { mutualList = new ArrayList(); for (int i = 0; i <
|
---|
| 816 | * dissues.size(); ++i) { if
|
---|
| 817 | * (oppAPreferences.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
| 818 | * HashMap vals =
|
---|
| 819 | * (HashMap)oppAPreferences.getRepeatedissue().get(dissues.get(i).getName());
|
---|
| 820 | * HashMap valsB =
|
---|
| 821 | * (HashMap)oppBPreferences.getRepeatedissue().get(dissues.get(i).getName());
|
---|
| 822 | *
|
---|
| 823 | * Object[] keys = vals.keySet().toArray(); int[] max = new int[] { 0,0 };
|
---|
| 824 | * Object[] maxkey = new Object[] {null,null }; for (int j = 0; j < keys.length;
|
---|
| 825 | * ++j) { Integer temp = (Integer)vals.get(keys[j]); if (temp.intValue() >
|
---|
| 826 | * max[0]) { max[0] = temp.intValue(); maxkey[0] = keys[j]; } else if
|
---|
| 827 | * (temp.intValue() > max[1]) { max[1] = temp.intValue(); maxkey[1] = keys[j]; }
|
---|
| 828 | * } if (valsB != null) { Object[] keysB = valsB.keySet().toArray(); int[] maxB
|
---|
| 829 | * = new int[] { 0,0 }; ; Object[] maxkeyB = new Object[] { null,null}; for (int
|
---|
| 830 | * j = 0; j < keysB.length; ++j) { Integer temp = (Integer)valsB.get(keysB[j]);
|
---|
| 831 | * if (temp.intValue() > maxB[0]) { maxB[0] = temp.intValue(); maxkeyB[0] =
|
---|
| 832 | * keysB[j]; } else if (temp.intValue() > maxB[1]) { maxB[1] = temp.intValue();
|
---|
| 833 | * maxkeyB[1] = keysB[j]; } } if (twocycle == 2) { if (maxkey[0] != null &&
|
---|
| 834 | * maxkeyB[0] != null && maxkey[0].equals(maxkeyB[0])) { ArrayList l = new
|
---|
| 835 | * ArrayList(); l.add(maxkey[0]); l.add(maxB[0]); l.add(max[0]);
|
---|
| 836 | * mutualList.add(i, l); } else mutualList.add(i, null); } else { boolean
|
---|
| 837 | * insideloop=true; for(int m=0;insideloop &&m<2;++m){ for(int
|
---|
| 838 | * z=0;insideloop&&z<2;++z){ if (maxkey[m] != null && maxkeyB[z] != null &&
|
---|
| 839 | * maxkey[m].equals(maxkeyB[z])) { ArrayList l = new ArrayList();
|
---|
| 840 | * l.add(maxkey[m]); l.add(maxB[z]); l.add(max[m]); mutualList.add(i, l);
|
---|
| 841 | * insideloop=false; } } } if(insideloop) mutualList.add(i, null);
|
---|
| 842 | *
|
---|
| 843 | * } } else { mutualList.add(i, null);
|
---|
| 844 | * oppBPreferences.getRepeatedissue().put(dissues.get(i).getName(), new
|
---|
| 845 | * HashMap()); } } else {
|
---|
| 846 | * oppAPreferences.getRepeatedissue().put(dissues.get(i).getName(), new
|
---|
| 847 | * HashMap()); mutualList.add(i, null); }
|
---|
| 848 | * if(((HashMap)oppAPreferences.getRepeatedissue
|
---|
| 849 | * ().get(dissues.get(i).getName())).size()==0 ||
|
---|
| 850 | * ((HashMap)oppAPreferences.getRepeatedissue
|
---|
| 851 | * ().get(dissues.get(i).getName())).size()==0){ twocycle--; } } if (twocycle !=
|
---|
| 852 | * 0) { twocycle--; if (opponentAB.size() == 0) { float nullval = 0.0f; for (int
|
---|
| 853 | * i = 0; i < mutualList.size(); ++i) { if (mutualList.get(i) != null) {
|
---|
| 854 | * ++nullval; } }
|
---|
| 855 | *
|
---|
| 856 | * nullval = nullval / mutualList.size(); if (nullval >= 0.5) twocycle--; }else
|
---|
| 857 | * twocycle--; } } return mutualList; }
|
---|
| 858 | *
|
---|
| 859 | * public Bid getNNBid(ArrayList<BidUtility> oppAB) { ArrayList<Issue> dissues =
|
---|
| 860 | * utilitySpace.getDomain().getIssues(); Bid maxBid = null; double maxutility =
|
---|
| 861 | * 0d; int size = 0; int exloop = 0; Bid newBid; while (exloop < dissues.size())
|
---|
| 862 | * { int bi = chooseBestIssue(); size = 0; while (oppAB != null && oppAB.size()
|
---|
| 863 | * > size) { Bid b = oppAB.get(size).getBid(); newBid = new Bid(b); try {
|
---|
| 864 | * HashMap vals = b.getValues(); vals.put(bi, getRandomValue(dissues.get(bi -
|
---|
| 865 | * 1))); newBid = new Bid(utilitySpace.getDomain(), vals); if
|
---|
| 866 | * (utilitySpace.getUtility(newBid) > getMyutility() &&
|
---|
| 867 | * utilitySpace.getUtility(newBid) > maxutility) { maxBid = new Bid(newBid);
|
---|
| 868 | * maxutility = utilitySpace.getUtility(maxBid); }
|
---|
| 869 | *
|
---|
| 870 | * } catch (Exception e) { System.out.println("Exception 66 " + e.getMessage());
|
---|
| 871 | * } size++; } exloop++; } return maxBid; }
|
---|
| 872 | *
|
---|
| 873 | *
|
---|
| 874 | * public int chooseBestIssue() { double random = Math.random(); double
|
---|
| 875 | * sumWeight = 0d;
|
---|
| 876 | *
|
---|
| 877 | * for (int i = utilitySpace.getDomain().getIssues().size(); i > 0; --i) {
|
---|
| 878 | * sumWeight += utilitySpace.getWeight(i); if (sumWeight > random) return i; }
|
---|
| 879 | * return 0; }
|
---|
| 880 | *
|
---|
| 881 | * public int chooseWorstIssue() { double random = Math.random() * 100; double
|
---|
| 882 | * sumWeight = 0d; int minin = 1; double min = 1.0d; for (int i =
|
---|
| 883 | * utilitySpace.getDomain().getIssues().size(); i > 0; --i) { sumWeight += 1.0d
|
---|
| 884 | * / utilitySpace.getWeight(i); if (utilitySpace.getWeight(i) < min) { min =
|
---|
| 885 | * utilitySpace.getWeight(i); minin = i; } if (sumWeight > random) return i; }
|
---|
| 886 | * return minin; }
|
---|
| 887 | *
|
---|
| 888 | * public Bid getMybestBid(Bid sugestBid, int time) { ArrayList<Issue> dissues =
|
---|
| 889 | * utilitySpace.getDomain().getIssues(); Bid newBid = new Bid(sugestBid); int
|
---|
| 890 | * index = chooseWorstIssue(); boolean loop = true; while (loop) { newBid = new
|
---|
| 891 | * Bid(sugestBid); try { HashMap map = newBid.getValues(); map.put(index,
|
---|
| 892 | * getRandomValue(dissues.get(index - 1))); newBid = new
|
---|
| 893 | * Bid(utilitySpace.getDomain(), map); if (utilitySpace.getUtility(newBid) >
|
---|
| 894 | * getMyutility()) { return newBid; } } catch (Exception e) { //
|
---|
| 895 | * System.out.println("Exception in my best bid : " + // e.getMessage()); loop =
|
---|
| 896 | * false; } } return newBid; }
|
---|
| 897 | *
|
---|
| 898 | *
|
---|
| 899 | * public void addBidToList(ArrayList<BidUtility> mybids, BidUtility newbid) {
|
---|
| 900 | * int index = mybids.size(); for (int i = 0; i < mybids.size(); ++i) { if
|
---|
| 901 | * (mybids.get(i).getUtility() <= newbid.getUtility()) { if
|
---|
| 902 | * (!mybids.get(i).getBid().equals(newbid.getBid())) index = i; else return; } }
|
---|
| 903 | * mybids.add(index, newbid);
|
---|
| 904 | *
|
---|
| 905 | * }
|
---|
| 906 | *
|
---|
| 907 | *
|
---|
| 908 | * public void calculateParamForOpponent(OpponentPreferences op, Bid bid) {
|
---|
| 909 | * ArrayList<Issue> dissues = utilitySpace.getDomain().getIssues(); HashMap
|
---|
| 910 | * bidVal = bid.getValues(); Object[] keys = bidVal.keySet().toArray();
|
---|
| 911 | *
|
---|
| 912 | * for (int i = 0; i < dissues.size(); ++i) { if
|
---|
| 913 | * (op.getRepeatedissue().get(dissues.get(i).getName()) != null) {
|
---|
| 914 | *
|
---|
| 915 | * HashMap vals = (HashMap)op.getRepeatedissue().get(dissues.get(i).getName());
|
---|
| 916 | *
|
---|
| 917 | * try { if (vals.get(bidVal.get(keys[i])) != null) { Integer repet =
|
---|
| 918 | * (Integer)vals.get(bidVal.get(keys[i])); repet = repet + 1;
|
---|
| 919 | * vals.put(bidVal.get(keys[i]), repet); } else { vals.put(bidVal.get(keys[i]),
|
---|
| 920 | * new Integer(1)); } } catch (Exception e) { //
|
---|
| 921 | * System.out.println("Exception 88 " + e.getMessage()); } } else { HashMap h =
|
---|
| 922 | * new HashMap(); // op.getRepeatedissue().get(dissues.get(i).getName()); try {
|
---|
| 923 | *
|
---|
| 924 | * h.put(bidVal.get(keys[i]), new Integer(1)); } catch (Exception e) { //
|
---|
| 925 | * System.out.println("Exception 99 " + e.getMessage()); }
|
---|
| 926 | * op.getRepeatedissue().put(dissues.get(i).getName(), h); } }
|
---|
| 927 | *
|
---|
| 928 | * }
|
---|
| 929 | *
|
---|
| 930 | * public void setMyutility(double myutility) { this.myutility = myutility; }
|
---|
| 931 | *
|
---|
| 932 | * public double getMyutility() { myutility = getTargetUtility(); if (myutility
|
---|
| 933 | * < 0.7) return 0.7d; return myutility; }
|
---|
| 934 | *
|
---|
| 935 | * public double getE() { if (withDiscount) return 0.25d; return 0.19d; }
|
---|
| 936 | *
|
---|
| 937 | * private class OpponentPreferences { private HashMap repeatedissue = new
|
---|
| 938 | * HashMap(); private ArrayList selectedValues; ArrayList<BidUtility>
|
---|
| 939 | * opponentBids = new ArrayList<BidUtility>();
|
---|
| 940 | *
|
---|
| 941 | * public void setRepeatedissue(HashMap repeatedissue) { this.repeatedissue =
|
---|
| 942 | * repeatedissue; }
|
---|
| 943 | *
|
---|
| 944 | * public HashMap getRepeatedissue() { return repeatedissue; }
|
---|
| 945 | *
|
---|
| 946 | * public void setSelectedValues(ArrayList selectedValues) { this.selectedValues
|
---|
| 947 | * = selectedValues; }
|
---|
| 948 | *
|
---|
| 949 | * public ArrayList getSelectedValues() { return selectedValues; }
|
---|
| 950 | *
|
---|
| 951 | * public void setOpponentBids(ArrayList<ParsAgent.BidUtility> opponentBids) {
|
---|
| 952 | * this.opponentBids = opponentBids; }
|
---|
| 953 | *
|
---|
| 954 | * public ArrayList<ParsAgent.BidUtility> getOpponentBids() { return
|
---|
| 955 | * opponentBids; } }
|
---|
| 956 | *
|
---|
| 957 | * private class BidUtility { private Bid bid; private double utility; private
|
---|
| 958 | * long time;
|
---|
| 959 | *
|
---|
| 960 | * BidUtility(Bid b, double u, long t) { this.bid = b; this.utility = u;
|
---|
| 961 | * this.time = t; }
|
---|
| 962 | *
|
---|
| 963 | * BidUtility(BidUtility newbid) { this.bid = newbid.getBid(); this.utility =
|
---|
| 964 | * newbid.getUtility(); this.time = newbid.getTime(); }
|
---|
| 965 | *
|
---|
| 966 | * public void setBid(Bid bid) { this.bid = bid; }
|
---|
| 967 | *
|
---|
| 968 | * public Bid getBid() { return bid; }
|
---|
| 969 | *
|
---|
| 970 | * public void setUtility(double utility) { this.utility = utility; }
|
---|
| 971 | *
|
---|
| 972 | * public double getUtility() { return utility; }
|
---|
| 973 | *
|
---|
| 974 | * public void setTime(long time) { this.time = time; }
|
---|
| 975 | *
|
---|
| 976 | * public long getTime() { return time; } }
|
---|
| 977 | *
|
---|
| 978 | * }
|
---|
| 979 | */ |
---|