Changeset 2369
- Timestamp:
- Feb 17, 2010 8:11:43 PM (11 years ago)
- Location:
- coopr.pyomo/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
coopr.pyomo/trunk/coopr/pyomo/base/sets.py
r2359 r2369 18 18 import types 19 19 import copy 20 import bidict 20 21 21 22 log = pyutilib.component.core.PluginGlobals.env().log … … 70 71 self.ordered=False 71 72 self.order=[] 73 self.order_dict = bidict.bidict() 72 74 self.domain=None 73 75 self.dimen = None … … 235 237 # Using a rule of the form f(z,model) -> element 236 238 # 237 ctr= 0239 ctr=1 238 240 val = self.initialize(ctr,self.model) 239 241 if self.dimen is None: … … 288 290 raise TypeError, "Cannot clear virtual Set object `"+self.name+"'" 289 291 self.value.clear() 290 self.order =[]292 self.order_dict=bidict.bidict() 291 293 292 294 def check_values(self): … … 297 299 for val in self.value: 298 300 self._verify(val) 299 300 def first(self):301 if self.virtual:302 raise TypeError, "Cannot access the first element of virtual set `"+self.name+"'"303 if len(self.order) > 0:304 return self.order[0]305 else:306 for val in self.value:307 return val308 301 309 302 def add(self, *args): … … 319 312 self.value.add(tmp) 320 313 if self.ordered: 314 if tmp in self.order_dict: 315 raise ValueError, "Element "+str(tmp)+" already exists in ordered set "+self.name 321 316 self.order.append(tmp) 317 self.order_dict[tmp:] = len(self.order) 318 319 322 320 except TypeError: 323 321 raise TypeError, "Problem inserting "+str(tmp)+" into set "+self.name … … 328 326 """ 329 327 if self.virtual: 330 raise KeyError, "Cannot remove element `"+str(element)+"' from virtual set "+str(self.name)328 raise KeyError, "Cannot remove element `"+str(element)+"' from virtual set "+str(self.name) 331 329 if element not in self.value: 332 raise KeyError, "Cannot remove element `"+str(element)+"' from set "+str(self.name)330 raise KeyError, "Cannot remove element `"+str(element)+"' from set "+str(self.name) 333 331 self.value.remove(element) 334 332 if self.ordered: 335 self.order.remove(element) 333 id = self.order_dict[element]-1 334 for i in xrange(id+1,len(self.order)): 335 self.order_dict[self.order[i]] = i-1 336 del self.order[id] 336 337 337 338 def discard(self, element): … … 344 345 self.order.remove(element) 345 346 self.value.discard(element) 347 348 def first(self): 349 if self.virtual: 350 raise TypeError, "Cannot access the first element of virtual set `"+self.name+"'" 351 return self.member(1) 352 353 def last(self): 354 if self.virtual: 355 raise TypeError, "Cannot access the last element of virtual set `"+self.name+"'" 356 return self.member(-1) 357 358 def __getitem__(self, key): 359 return self.member(key) 360 361 def member(self, key): 362 if self.ordered: 363 return self.order_dict.inv[key] 364 # 365 # If the set is not ordered, then we use the intrinsic ordering imposed by the set. 366 # We convert the set to a list and return the specified value. 367 # 368 if key >= 1: 369 return list(self.value)[key-1] 370 elif key < 0: 371 return list(self.value)[key] 372 else: 373 raise IndexError, "Valid index values for sets are 1 ... len(set) or -1 ... -len(set)" 346 374 347 375 def ord(self, match_element): … … 350 378 """ 351 379 if self.ordered is False: 352 raise AttributeError, "Cannot invoke ord method for an unordered set!" 353 # linear, but the only way given the current representation/attributes of a set. 354 i=1 355 for element in self.order: 356 if match_element == element: 357 return i 358 i=i+1 359 raise ValueError, "Unknown input element="+str(match_element)+" provided as input to ord() method for set="+str(self.name) 380 raise AttributeError, "Cannot invoke ord() method for unordered set="+str(self.name) 381 try: 382 return self.order[match_element] 383 except IndexError: 384 raise IndexError, "Unknown input element="+str(match_element)+" provided as input to ord() method for set="+str(self.name) 385 386 def next(self, match_element, k=1): 387 return self.order[self.order_dict[element]+k] 388 389 def nextw(self, match_element, k=1): 390 ndx = self.order_dict[match_element]+k 391 total = len(self.order) 392 if ndx > total: 393 ndx -= total 394 if ndx <= 0: 395 ndx += total 396 return self.order.inv[ndx] 397 398 def prev(self, match_element, k=1): 399 return self.next(match_element, k=-k) 400 401 def prevw(self, match_element, k=1): 402 return self.nextw(match_element, k=-k) 360 403 361 404 def pprint(self, ostream=None): … … 383 426 else: 384 427 tmp = copy.copy(list(self.value)) 385 tmp.sort()428 tmp.sort() 386 429 print >>ostream, "\t ",tmp 387 388 def __getitem__(self, key):389 if not self.ordered:390 raise IndexError, "Cannot get an item in unordered set "+self.name391 return self.order[key]392 430 393 431 def __len__(self): … … 758 796 else: 759 797 rule_list=[] 760 ctr= 0798 ctr=1 761 799 args = tuple(tmp+[ctr,self.model]) 762 800 val = self.initialize(*args) -
coopr.pyomo/trunk/coopr/pyomo/tests/unit/test_set.py
r2359 r2369 1525 1525 OUTPUT.close() 1526 1526 def tmp_init(z,model): 1527 if z ==value(model.n) or z == 10:1527 if z>value(model.n) or z == 11: 1528 1528 return None 1529 1529 return z … … 1737 1737 OUTPUT.close() 1738 1738 def tmp_init(i,z,model): 1739 if z ==value(model.n):1739 if z>value(model.n): 1740 1740 return None 1741 1741 return z -
coopr.pyomo/trunk/examples/pyomo/tutorials/set.py
r909 r2369 172 172 # 173 173 def U_init(z, model): 174 if z== 5:174 if z==6: 175 175 return None 176 if z== 0:176 if z==1: 177 177 return 1 178 178 else: 179 return model.U[z-1]* (z+1)179 return model.U[z-1]*z 180 180 model.U = Set(ordered=True, initialize=U_init) 181 181 # … … 187 187 # 188 188 def V_init(i, z, model): 189 if z== 5:189 if z==6: 190 190 return None 191 191 if i==1: 192 if z== 0:192 if z==1: 193 193 return 1 194 194 else: 195 return (z+1)196 return model.V[i-1][z]+z 195 return z 196 return model.V[i-1][z]+z-1 197 197 model.V = Set(RangeSet(1,4), initialize=V_init, ordered=True) 198 198
Note: See TracChangeset
for help on using the changeset viewer.