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
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
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")