def solve_d(self, blk_divid_num, input_vertex=None):
        org_v_range = (self.total_sim_time // self.Nz) // blk_divid_num
        cur_v_range = org_v_range // 2

        loop_n = 0
        passVertex = None
        if input_vertex is None:
            last_passVertex = self.criticalVertex
        else:
            last_passVertex = input_vertex

        while True:
            if loop_n != 0:
                last_passVertex = passVertex
            vertexList = self.crtGridVertexList(vertex=last_passVertex,
                                                v_range=cur_v_range,
                                                n=3)
            passFId, passVertex = self.searchMinFid(vertexList=vertexList,
                                                    BlkNum=-1,
                                                    BlkDirect=self.startDirect)
            clear_gmsfile.clearfile()
            print("cur_v_range :", cur_v_range)
            print("grid_n :", 3)
            print(vertexList)
            print(passFId, passVertex)
            if cur_v_range == 1 and last_passVertex == passVertex:
                break
            loop_n += 1
            if cur_v_range == 1:
                continue
            else:
                cur_v_range = cur_v_range // 2

        return passFId, passVertex
示例#2
0
    def solve(self, vertexNum):
        n = 0
        shiftLeftNum = self.Nz * self.MV_num

        FId = 1000
        lastBlkVertex = None
        while n < self.Nz:
            self.criticalVertex.clear()
            vertexList = self.genVertexList(v_num=shiftLeftNum,
                                            blk_len=self.time_len,
                                            num=vertexNum)
            #vertexList.insert(0,[214])
            #vertexList.insert(0,[173, 187, 200, 213])
            print(vertexList)
            blk_len = self.time_len * (n + 1)
            if n == 0:
                passFId, passVertex = self.searchMinFid(
                    vertexList=vertexList,
                    BlkNum=n,
                    BlkDirect=self.startDirect)
            else:
                vertexList = self.connectVertex(blkNum=n,
                                                inputVertex=lastBlkVertex,
                                                VertexList=vertexList)
                if blk_len > self.total_sim_time:
                    blk_len = self.total_sim_time
                passFId, passVertex = self.searchMinFid(
                    vertexList=vertexList,
                    BlkNum=n,
                    BlkDirect=self.startDirect)

            print("pass result:", passFId, passVertex)
            lastBlkVertex = passVertex

            self.BlockList[n].shift = len(passVertex)
            self.BlockList[n].BlkVertex = passVertex.copy()
            self.BlockList[n].BlkMaxSV = None
            self.BlockList[n].BlkMinSV = None
            self.BlockList[n].passFId = passFId

            if passFId < FId:
                FId = passFId
            clear_gmsfile.clearfile()
            shiftLeftNum = shiftLeftNum - len(passVertex)
            print(f"Block[{n+1}] pass FId: {passFId}")
            print(f"Block[{n+1}] critical vertex: {passVertex}")
            #input()
            n += 1

        for n in range(self.Nz):
            self.BlockList[n].showBlockData()
        return FId
    def solve(self, vertexNum):
        n = 0
        shiftLeftNum = self.Nz

        FId = 1000
        lastBlkVertex = None
        while n < self.Nz:
            self.criticalVertex.clear()
            vertexList = self.genVertexList(v_num=shiftLeftNum,
                                            blk_len=self.time_len,
                                            num=vertexNum)
            print(vertexList)
            blk_len = self.time_len * (n + 1)
            if n == 0:
                passFId, passVertex = self.searchMinFid(
                    vertexList=vertexList,
                    BlkNum=n,
                    BlkDirect=self.startDirect)
            else:
                vertexList = self.connectVertex(blkNum=n,
                                                inputVertex=lastBlkVertex,
                                                VertexList=vertexList)
                if blk_len > self.total_sim_time:
                    blk_len = self.total_sim_time
                passFId, passVertex = self.searchMinFid(
                    vertexList=vertexList,
                    BlkNum=n,
                    BlkDirect=self.startDirect)

            print(passFId, passVertex)
            lastBlkVertex = passVertex
            #MaxSV, MinSV = self.getSVbyFId(SV=self.init_h,fid=passFId,blkNum=n,blk_len=blk_len,blkDirect=self.startDirect,Blkvertex=passVertex)

            self.BlockList[n].shift = len(passVertex)
            self.BlockList[n].BlkVertex = passVertex.copy()
            self.BlockList[n].passFId = passFId

            if passFId < FId:
                FId = passFId
            clear_gmsfile.clearfile()
            shiftLeftNum = self.Nz - len(passVertex)
            print(f"Block[{n+1}] pass FId: {passFId}")
            print(f"Block[{n+1}] critical vertex: {passVertex}")
            #input()
            n += 1

        for n in range(self.Nz):
            self.BlockList[n].showBlockData()
        self.criticalVertex = passVertex.copy()
        return FId
    def solve_v2(self, vertexNum):
        n = 0
        shiftLeftNum = self.Nz * self.MV_num

        FId = 1000
        lastBlkVertex = None
        while n < self.Nz:
            self.criticalVertex.clear()
            vertexList = self.crtTotalVertexList(v_num=shiftLeftNum,
                                                 num=vertexNum)
            print(len(vertexList))
            if n == 0:
                passFId, passVertex = self.searchMinFId(vertexList=vertexList,
                                                        BlkNum=n)
            else:
                vertexList = self.connectVertex(blkNum=n,
                                                inputVertex=lastBlkVertex,
                                                VertexList=vertexList)
                passFId, passVertex = self.searchMinFId(vertexList=vertexList,
                                                        BlkNum=n)

            print("pass result:", passFId, passVertex)
            lastBlkVertex = passVertex

            self.BlockList[n].shift = len(passVertex)
            self.BlockList[n].BlkVertex = passVertex.copy()
            self.BlockList[n].BlkMaxSV = None
            self.BlockList[n].BlkMinSV = None
            self.BlockList[n].passFId = passFId

            if passFId < FId:
                FId = passFId
            clear_gmsfile.clearfile()
            shiftLeftNum = shiftLeftNum - len(passVertex)
            print(f"Block[{n+1}] pass FId: {passFId}")
            print(f"Block[{n+1}] critical vertex: {passVertex}")
            #input()
            n += 1

        for n in range(self.Nz):
            self.BlockList[n].showBlockData()
        return FId
示例#5
0
            if passFId < FId:
                FId = passFId
            clear_gmsfile.clearfile()
            shiftLeftNum = shiftLeftNum - len(passVertex)
            print(f"Block[{n+1}] pass FId: {passFId}")
            print(f"Block[{n+1}] critical vertex: {passVertex}")
            #input()
            n += 1

        for n in range(self.Nz):
            self.BlockList[n].showBlockData()
        return FId


if __name__ == "__main__":
    clear_gmsfile.clearfile()
    timer = timer.MyTimer()
    cstr_test = AlcoholicCSTR(20)
    cstr_test.setStartDirect(-1)
    cstr_test.setMVnumber(2)
    #cstr_test.getData(vertex=[167,179],startDirect=-1)
    resultFId = cstr_test.solve(3)
    print("  ")
    print("Result FId:", resultFId)
    print("total calculate vertex:", cstr_test.cal_vertex_num)
    print("other possible vertex:")
    for dic in cstr_test.similar_vertex:
        print(dic)
    timer.getTime(kind="process")
    timer.getTime(kind="real")