Esempio n. 1
0
class Obj:
    """
    群体:
    """

    def __init__(self, name, init_x, init_y, ch, color):
        self.name = name
        _fn = "dot%s" % self.name
        self.backup = basic.BackUp(_fn)
        self.chr = ch
        self.color = color
        self.V = (0., 0., 0., 0.,)

        """群体的个人集合
        """
        self.P = []

        """性别情况
        """
        self.male = 0
        self.female = 0

        """怀孕人数
        """
        self.mating = 0

        self.policy = Policy()
        self.X = init_x + self.policy._func()
        self.Y = init_y + self.policy._func()
        self.load()

    def move(self):
        self.V = self.policy.getPolicy()
        self.X = self.X + (self.V[0]-self.V[2])
        self.Y = self.Y + (self.V[1]-self.V[3])

    def getPosition(self):
        return int(self.X), int(self.Y), self.chr, self.color

    def save(self):
        _data = {
            "x": self.X,
            "y": self.Y,
            "ch": self.chr,
            "c": self.color,
            "persons": []
        }
        for _p in self.P:
            _data['persons'].append(_p.show_name())
            _p.save()
        self.backup.save(_data)

    def load(self):
        _info = self.backup.load()
        if _info is not None:
            self.X = _info["x"]
            self.Y = _info["y"]
            self.chr = _info["ch"]
            self.color = _info["c"]
            for _name in _info["persons"]:
                _p = resource.Ps(_name)
                if _p.show_sex() == 'Male':
                    self.male += 1
                else:
                    self.female += 1
                self.P.append(_p)
        else:
            """初值:每个群体100人
            """
            for _i in range(100):
                """个体姓名
                """
                _name = "%s-%s" % (self.name, uuid.uuid4())
                _p = resource.Ps(_name)
                if _p.show_sex() == 'Male':
                    self.male += 1
                else:
                    self.female += 1
                self.P.append(_p)

    def time_scale(self, ts):
        """
        时标处理器
        :param ts: 时标
        :return: 存活个数,需求总量,男性个数,女性个数,怀孕人数
        """
        _alive = 0
        _requirment = 0
        _male = []
        _female = []
        self.mating = 0
        for _p in self.P:
            if ts % 24 == 0:
                _requirment += _p.life_one_day()
                """收集满足交配条件的个人
                """
                if _p.can_mating("Male"):
                    _male.append(_p)
                if _p.can_mating("Female"):
                    _female.append(_p)
            else:
                _requirment += _p.show()
            if _p.alive():
                    _alive += 1
        if len(_male) > 0 and len(_female) > 0:
            """若有满足交配条件的两性,则允许交配
            """
            for _m in _male:
                _m.mating('Male')
            for _f in _female:
                if _f.mating('Female'):
                    self.mating += 0
        for _p in self.P:
            if _p.is_mating():
                self.mating += 1
            if _p.birth():
                """新生一代
                """
                _name = "%s-%s" % (self.name, uuid.uuid4())
                _p = resource.Ps(_name)
                if _p.show_sex() == 'Male':
                    self.male += 1
                else:
                    self.female += 1
                self.P.append(_p)

        return _alive, _requirment, self.male, self.female, self.mating
Esempio n. 2
0
class Obj:
    """
    群体:
    """
    def __init__(self, name, init_x, init_y, ch, color):
        self.name = name
        _fn = "dot%s" % self.name
        self.backup = basic.BackUp(_fn)
        self.chr = ch
        self.color = color
        self.V = (
            0.,
            0.,
            0.,
            0.,
        )
        self.E = 0
        """群体的个人集合
        """
        self.P = []
        """性别情况
        """
        self.male = 0
        self.female = 0
        """怀孕人数
        """
        self.mating = 0

        self.policy = Policy()
        self.X = init_x + self.policy._func()
        self.Y = init_y + self.policy._func()
        self.load()

    def move(self):
        self.V = self.policy.getPolicy()
        self.X = self.X + (self.V[0] - self.V[2])
        self.Y = self.Y + (self.V[1] - self.V[3])

    def get_chr(self):
        return self.chr

    def getPosition(self):
        return int(self.X), int(self.Y), self.chr, self.color

    def save(self):
        _data = {
            "x": self.X,
            "y": self.Y,
            "ch": self.chr,
            "c": self.color,
            "persons": []
        }
        for _p in self.P:
            _data['persons'].append(_p.show_name())
            _p.save()
        self.backup.save(_data)

    def load(self):
        _info = self.backup.load()
        if _info is not None:
            self.X = _info["x"]
            self.Y = _info["y"]
            self.chr = _info["ch"]
            self.color = _info["c"]
            for _name in _info["persons"]:
                _p = resource.Ps(_name)
                if _p.show_sex() == 'Male':
                    self.male += 1
                else:
                    self.female += 1
                self.P.append(_p)
        else:
            """初值:每个群体100人
            """
            for _i in range(100):
                """个体姓名
                """
                _name = "%s-%s" % (self.name, uuid.uuid4())
                _p = resource.Ps(_name)
                if _p.show_sex() == 'Male':
                    self.male += 1
                else:
                    self.female += 1
                self.P.append(_p)

    def set_power(self, e):
        """
        给群体分配能量
        :param e: 能量
        :return:
        """
        self.E = e

    def time_scale(self, ts):
        """
        时标处理器
        :param ts: 时标
        :return: 存活个数,需求总量,男性个数,女性个数,怀孕人数
        """
        _alive = 0
        _requirment = 0
        _male = []
        _female = []
        self.mating = 0

        for _p in self.P:
            if ts % 24 == 0:
                _requirment += _p.life_one_day()
                """收集满足交配条件的个人
                """
                if _p.can_mating("Male"):
                    _male.append(_p)
                if _p.can_mating("Female"):
                    _female.append(_p)
            else:
                _requirment += _p.show()
            if _p.alive():
                _alive += 1
            else:
                """从人群中删除"""
                self.P.remove(_p)
        """群体拥有的能量满足需求时"""
        if self.E > _requirment:

            if len(_male) > 0 and len(_female) > 0:
                """若有满足交配条件的两性,则允许交配
                """
                for _m in _male:
                    _m.mating('Male')
                for _f in _female:
                    if _f.mating('Female'):
                        self.mating += 0
            for _p in self.P:
                if _p.is_mating():
                    self.mating += 1
                if _p.birth():
                    """新生一代
                    """
                    _name = "%s-%s" % (self.name, uuid.uuid4())
                    _p = resource.Ps(_name)
                    if _p.show_sex() == 'Male':
                        self.male += 1
                    else:
                        self.female += 1
                    self.P.append(_p)

            self.E -= _requirment

        return _alive, _requirment, self.male, self.female, self.mating