Files
ai-econ/ai_economist/foundation/entities/resources.py

84 lines
2.3 KiB
Python

# Copyright (c) 2020, salesforce.com, inc.
# All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause
# For full license text, see the LICENSE file in the repo root
# or https://opensource.org/licenses/BSD-3-Clause
import numpy as np
from ai_economist.foundation.base.registrar import Registry
class Resource:
"""Base class for Resource entity classes.
Resource classes describe entities that can be a part of an agent's inventory.
Resources can also be a part of the world as collectible entities: for each
Resource class with Resource.collectible=True, a complementary
ResourceSourceBlock Landmark class will be created in landmarks.py. For each
collectible resource in the environment, the world map will include a resource
source block channel (representing landmarks where collectible resources are
generated) and a resource channel (representing locations where collectible
resources have generated).
"""
name = None
color = None # array of RGB values [0 - 1]
collectible = None # Is this something that exists in the world?
# (versus something that can only be owned)
craft_recp = None # dict of recource name and amount
craft_labour_base= 0.0
def __init__(self):
assert self.name is not None
assert self.color is not None
assert self.collectible is not None
resource_registry = Registry(Resource)
@resource_registry.add
class Wood(Resource):
"""Wood resource. collectible."""
name = "Wood"
color = np.array([107, 143, 113]) / 255.0
collectible = True
@resource_registry.add
class Stone(Resource):
"""Stone resource. collectible."""
name = "Stone"
color = np.array([241, 233, 219]) / 255.0
collectible = True
@resource_registry.add
class Coin(Resource):
"""Coin resource. Included in all environments by default. Not collectible."""
name = "Coin"
color = np.array([229, 211, 82]) / 255.0
collectible = False
@resource_registry.add
class RawGem(Resource):
"""Raw Gem that can be processed further"""
name = "Raw_Gem"
color = np.array([241, 233, 219]) / 255.0
collectible = True
@resource_registry.add
class Gem(Resource):
"""Proccesed Gem. Craftable."""
name = "Gem"
color = np.array([241, 233, 219]) / 255.0
collectible = False
craft_recp= {"Raw_Gem": 1}
craft_labour_base= 1