diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..535d218
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+hashcode
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/hashcode.iml b/.idea/hashcode.iml
new file mode 100644
index 0000000..2ef51e3
--- /dev/null
+++ b/.idea/hashcode.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..99c2ab0
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..976f160
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..2ef621e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,526 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1455219424948
+
+ 1455219424948
+
+
+ 1455219672286
+
+
+ 1455219672286
+
+
+ 1455219704568
+
+
+ 1455219704568
+
+
+ 1455221407393
+
+
+ 1455221407393
+
+
+ 1455222302839
+
+
+ 1455222302839
+
+
+ 1455224464485
+
+
+ 1455224464485
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/logger.py
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logger.py b/logger.py
index a898c89..768529b 100644
--- a/logger.py
+++ b/logger.py
@@ -3,12 +3,12 @@ def __init__(self):
self.commands = {}
def append_command(self, t, command):
- clist = self.commands[t]
+ clist = self.commands.get(t, [])
clist.append(command)
self.commands[t] = clist
- def write_to_file(self, t_max):
- fname = 'out.txt'
+ def write_to_file(self, t_max, s):
+ fname = 'out{}.txt'.format(s)
linear = []
@@ -17,16 +17,16 @@ def write_to_file(self, t_max):
linear.extend(self.commands[t])
with open(fname, 'w') as f:
- f.write('{}'.format(len(self.commands)))
+ f.write('{}\n'.format(len(linear)))
for cmd in linear:
cmd_name = cmd['name']
if cmd_name == 'load':
- f.write('{} L {} {} {}'.format(cmd['drone_id'],
+ f.write('{} L {} {} {}\n'.format(cmd['drone_id'],
cmd['warehouse_id'],
cmd['prod_id'],
cmd['prod_count']))
elif cmd_name == 'deliver':
- f.write('{} D {} {} {}'.format(cmd['drone_id'],
+ f.write('{} D {} {} {}\n'.format(cmd['drone_id'],
cmd['order_id'],
cmd['prod_id'],
cmd['prod_count']))
diff --git a/models.py b/models.py
index 1da17a4..f00c4e2 100644
--- a/models.py
+++ b/models.py
@@ -7,7 +7,7 @@ def __init__(self, items, location, warehouseDistances):
self.warehouseDistances = warehouseDistances
def is_ready_at(self, warehouse):
- for idx, req_item in self.items.enumerate():
+ for idx, req_item in enumerate(self.items):
if warehouse.stock[idx] < req_item:
return False
return True
@@ -31,7 +31,7 @@ def load(self, nItems, itemType, warehouse):
"""Moves the drone to a target warehouse and takes the required items
and increments its finishedAt counter"""
turnsMoving = self._move(warehouse.location)
- warehouse.items[itemType] -= nItems
+ warehouse.stock[itemType] -= nItems
self.cargo[itemType] += nItems
self.finishedAt += turnsMoving + 1
@@ -59,6 +59,6 @@ def _move(self, targetLocation):
"""Moves the drone to the targetLocation and returns the turns taken"""
distance = math.sqrt(
(self.location[0] - targetLocation[0])**2 +
- self.location[1] - targetLocation[1])
+ (self.location[1] - targetLocation[1])**2)
self.location = targetLocation
return math.ceil(distance)
diff --git a/out.txt b/out.txt
new file mode 100644
index 0000000..1fa6719
--- /dev/null
+++ b/out.txt
@@ -0,0 +1,3 @@
+2
+0 L 0 0 3
+0 D 1 0 3
diff --git a/out0.txt b/out0.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/out0.txt
@@ -0,0 +1 @@
+0
diff --git a/out100.txt b/out100.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out100.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out200.txt b/out200.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out200.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out300.txt b/out300.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out300.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out400.txt b/out400.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out400.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out500.txt b/out500.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out500.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out600.txt b/out600.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out600.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/out700.txt b/out700.txt
new file mode 100644
index 0000000..61b1bf4
--- /dev/null
+++ b/out700.txt
@@ -0,0 +1,5 @@
+4
+0 L 0 50 1
+0 L 0 242 1
+0 D 43 50 1
+0 D 43 242 1
diff --git a/parser.py b/parser.py
index eb00e63..59e47b1 100644
--- a/parser.py
+++ b/parser.py
@@ -9,7 +9,9 @@ def getDistance(location1, location2):
euclidDist = math.sqrt((location1[0]-location2[0])**2+(location1[1]-location2[1])**2)
return math.ceil(euclidDist)
-f = open("example.in","r")
+
+
+f = open("busy_day.in","r")
commandList = []
#Parameters of simulation
[nRows,nCols,nDrones,maxSteps,maxLoad]=[int(i) for i in f.readline().split()]
@@ -36,22 +38,46 @@ def getDistance(location1, location2):
tmpItems = [int(i) for i in f.readline().split()]
items = [tmpItems.count(i) for i in range(nTypes)]
warehouseDistances = [(getDistance(location, warehouseList[i].location),i) for i in range(nWarehouses)]
- warehouseDistances = warehouseDistances.sort()
+ warehouseDistances.sort()
order = Order(items,location,warehouseDistances)
orderList.append(order)
#Create drones
droneList = [Drone(warehouseList[0].location, maxLoad, nTypes) for i in range(nDrones)]
+
+def orderWeight(order):
+ sum = 0
+ for i in range(len(order.items)):
+ sum += order.items[i] * productWeights[i]
+ return sum
+
+def easyOrders(orders,warehouses):
+ easy = []
+ wh = copy.deepcopy(warehouses)
+ for oidx, order2 in enumerate(orders):
+ if orderWeight(order2) < maxLoad:
+ for _, widx in order2.warehouseDistances:
+ if order2.is_ready_at(wh[widx]):
+ easy.append((oidx, widx))
+ for i in range(len(wh[widx].stock)):
+ wh[widx].stock[i] -= order2.items[i]
+ break
+ return easy
+
#World
for iStep in xrange(maxSteps):
#do all jobs pending and find free drones
#freeDronesIdx = []
+
+ if (iStep % 100 == 0):
+ log.write_to_file(maxSteps, iStep)
+
availableOrders = easyOrders(orderList,warehouseList)
for iDrone in xrange(nDrones):
if droneList[iDrone].finishedAt == iStep:
warehouseDistances = [(getDistance(droneList[iDrone].location, warehouseList[i].location),i) for i in range(nWarehouses)]
- warehouseDistances = warehouseDistances.sort()
+ warehouseDistances.sort()
#Find order idx for drone, starting by looking at the closest warehouse
for i in xrange(nWarehouses):
preferredWarehouseIdx = warehouseDistances[i][1]
@@ -80,7 +106,7 @@ def getDistance(location1, location2):
for itemIdx in xrange(len(currentOrder.items)):
itemcount = currentOrder.items[itemIdx]
if itemcount > 0:
- droneList[iDrone].deliver(itemcount, itemIdx, order[orderIdx])
+ droneList[iDrone].deliver(itemcount, itemIdx, orderList[orderIdx])
#TODO create command in logger
commandDict = {
'name' : 'deliver',
@@ -94,21 +120,5 @@ def getDistance(location1, location2):
#update available orders
#availableOrders = easyOrders(orderList,warehouseList)
-def orderWeight(order):
- sum = 0
- for i in range(len(order.items)):
- sum += order.items[i] * productWeights[i]
- return sum
-
-def easyOrders(orders,warehouses):
- easy = []
- wh = copy.deepcopy(warehouses)
- for oidx, order in orders.enumerate():
- if orderWeight(order) < maxLoad:
- for widx in order.warehouseDistances:
- if order.is_ready_at(wh[widx]):
- easy.append((oidx, widx))
- for i in range(len(wh[widx].stock)):
- wh[widx].stock[i] -= order.items[i]
- break
- return easy
+
+log.write_to_file(maxSteps)
\ No newline at end of file