/
main.py
90 lines (77 loc) · 2.72 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from consumer import Consumer
from property import Property
from nyop import NYOP
from random import *
def run(numOfConsumer, conCoeffA, conCoeffB, numOfPro, proCoeffAList,
proCoeffBList, maxSlot):
consumerList = []
for i in range(numOfConsumer):
valueDict = {}
valueDict[1] = randint(10,60)
valueDict[2] = valueDict[1] + randint(10,60)
valueDict[3] = valueDict[2] + randint(10,60)
valueDict[4] = valueDict[3] + randint(10,60)
valueDict[5] = valueDict[4] + randint(10,60)
#print(valueDict)
consumer = Consumer(i, valueDict)
consumer.set_bidList(conCoeffA, conCoeffB)
consumerList.append(consumer)
propertyDict = {1:[], 2:[], 3:[], 4:[], 5:[]}
numOfPro = 20
for n in range(numOfPro):
star = randint(1,5)
if star == 1:
cost = randint(10,40)
elif star == 2:
cost = randint(30,100)
elif star == 3:
cost = randint(50,160)
elif star == 4:
cost = randint(70, 220)
elif star == 5:
cost = randint(90,280)
#print(cost)
pro = Property(n, star, cost, randint(1,5))
pro.set_priceList(proCoeffAList, proCoeffBList, maxSlot)
propertyDict[star].append(pro)
priceline = NYOP()
priceline.compute(consumerList, propertyDict)
#print("priceline's profit", priceline.profit)
aveConU = sum(c.utility for c in consumerList)/numOfConsumer
#print("average consumer utility", aveConU)
sumProProfit = 0
for k in propertyDict.keys():
sumProProfit += sum(p.profit for p in propertyDict[k])
aveProProfit = sumProProfit/numOfPro
#print("average property profit", aveProProfit)
return (priceline.profit, aveConU, aveProProfit)
def main():
iterNum = 200
print "iterate", iterNum, "times"
numOfConsumer = 60
numOfPro = 20
print "number of consumer: ", numOfConsumer
print "number of property: ", numOfPro
#strategy of consumers
#bid = value*a - b
conCoeffA = 0.8
conCoeffB = 0
#strategy of properties
#price = cost*a + b
proCoeffAList = [1.1, 1.2, 1.3]
proCoeffBList = [0, 0, 0]
#maximum number of price the property can upload to priceline
maxPriceSlot = 3
pricelineProfit = 0
sumConU = 0
sumProU = 0
for i in range(iterNum):
pp, ac, ap = run(numOfConsumer, conCoeffA, conCoeffB, numOfPro,
proCoeffAList, proCoeffBList, maxPriceSlot)
pricelineProfit += pp
sumConU += ac
sumProU += ap
print "average Priceline's profit", pricelineProfit/iterNum
print "average consumer utility", sumConU/iterNum
print "average property profit", sumProU/iterNum
main()