Esempio n. 1
0
def update_tree(GP_prog):
    import initGlobal as init
    import update_state as us
    anten = init.AnT()
    Sub = init.Sub()
    L = init.L()
    U = init.U()
    low = init.lowlevel()
    GP = init.GP()
    #path = us.load_temporary_path()
    us.update_all_saved_parameters(anten, Sub, L, U, GP, low)

    # calculate all of edge of substrate.
    GP_prog.childs[0].childs[0].valueofnode = []
    for i in range(3):
        GP_prog.childs[0].childs[0].valueofnode.append(
            GP_prog.childs[0].childs[0].childs[i].valueofnode)

    temp = GP_prog.childs[0].childs[0].valueofnode

    GP_prog.childs[0].valueofnode = []
    for i in range(3):
        # calculate all of the real substrate's parameters.
        if i == 0:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOx[1] - Sub.rangeOx[0]) + Sub.rangeOx[0],
                          4)  # Ox edge
        elif i == 1:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOy[1] - Sub.rangeOy[0]) + Sub.rangeOy[0],
                          4)  # Oy edge.
        else:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOz[1] - Sub.rangeOz[0]) + Sub.rangeOz[0],
                          4)  # Oz edge.
        GP_prog.childs[0].valueofnode.append(temp2)

    # Secondly create patterns.
    MaxX = GP_prog.childs[0].valueofnode[
        0] - Sub.decrease  ### real MaxX,Y are decreased 1mm before to create
    # any pattern unit(like L1,U1,U2,...).
    MaxY = GP_prog.childs[0].valueofnode[1] - Sub.decrease
    Zsize = GP_prog.childs[0].valueofnode[2]
    GP_prog.substrate_size = [MaxX + Sub.decrease, MaxY + Sub.decrease, Zsize]

    GP_prog.childs[1].childs[0].childs[0] = gp.updateFullBlueTree(
        GP_prog.childs[1].childs[0].childs[0], [MaxX, MaxY], 5)
    GP_prog.childs[1].childs[0].valueofnode = gp.get_val_frombluetree(
        copy.deepcopy(GP_prog.childs[1].childs[0].childs[0]))
    GP_prog.childs[1].valueofnode = GP_prog.childs[1].childs[0].valueofnode

    return GP_prog
def lowlevel_optimizer(ind, state, pop_num):
    # the inputs: - IND  individual
    # 			  - STATE
    #			  - POP_NUM the specified ID of current individual which be optimized in here.

    import initGlobal as init
    import update_state as us
    lowinit = init.lowlevel()
    ant = init.AnT()
    inGP = init.GP(
    )  # get the essential parameters of GP process from initGlobal.py file. note: this's global parameter.
    if init.Re_trainning:
        ant = init.AnT()
        Sub = init.Sub()
        L = init.L()
        U = init.U()
        lowinit = init.lowlevel()
        GP = init.GP()
        #path = us.load_temporary_path()
        us.update_all_saved_parameters(ant, Sub, L, U, GP, lowinit)
    else:
        us.update_path_low(ant, lowinit)

    anpha = lowinit.anpha
    saved_tree = [
    ]  # save all of the current tree generated by all of the directions
    for i in range(lowinit.number_direction):
        saved_tree.append([])
    state.lowlevel = True
    global_name = lowinit.tmpDir + ant.Antenna_Name + 'lowlevel_gen_'
    global_tabname = lowinit.tmpTab + ant.Antenna_Name + '_gen_'
    print('running low-level optimizer for generation ', state.gen,
          'population ', pop_num)
    chromosome, subtree_chrom, IDlist = hp.getChrom(
        ind)  # get chromosome from tree and other atributes.

    num = len(chromosome)  # number of values will be optimized.

    # create randomly the trainning data for ANN.

    y = []  # to save all of the fitness of each direction.
    for i in range(lowinit.number_direction):
        y.append([])
    state.current_low_fitness = y

    fitness = ind.fitness  # save original chromosome fitness.
    return_loss = []
    return_loss.append(ind.ReturnLoss)  # save original return loss variable.
    for i in range(lowinit.number_direction):
        return_loss.append([])

    X_training = np.zeros(
        (lowinit.number_direction,
         num))  # X_training in this case used for direct search method.

    d = X_training  # init the matrix of the directions.

    current_chromosome = np.zeros(num)

    for i in range(
            num
    ):  # save original chromosome, where this point is the start point as well as the x0 point.
        current_chromosome[i] = chromosome[i]

    for i in range(
            lowinit.number_direction):  # create the matrix of the direction.
        for ii in range(num):
            d[i][ii] = round(random.uniform(
                -1, 1), 4)  # X_training in this case is the matrix direction.
    #print(X_training)
    ########################################################################################################################
    ########################################################################################################################
    for k in range(lowinit.number_search_step):
        state.lowlevel_k = k
        # now update the x_k follow each of direction.
        for i in range(lowinit.number_direction):
            for ii in range(num):
                X_training[i][ii] = current_chromosome[ii] + anpha * d[i][ii]
                if X_training[i][ii] > 1:
                    X_training[i][ii] = 1
                if X_training[i][ii] < -1:
                    X_training[i][ii] == -1

        # generate all of the scripts.
        print('generating ', lowinit.number_direction,
              ' scripts in low lelvel optimizer in generation ', state.gen)
        '''
		# before run the next generation, all of the tab file need be deleted.
		filelist = [ f for f in os.listdir(lowinit.tmpTab) if f.endswith(".tab") ]
		for f in filelist:
			os.remove(os.path.join(lowinit.tmpTab, f))
		# be fore run the next gen, all of the hfss file in temp need be deleted.
		filelist = [ f for f in os.listdir(lowinit.tmpDir) if (f.endswith(".hfss") or f.endswith(".vbs") or f.endswith(".txt"))]
		for f in filelist: # delete all before files.
			os.remove(os.path.join(lowinit.tmpDir, f))'''
        ########################################################
        ############## insert chromosome.
        # create temporary population to save current new individual.
        #pop = []
        #for i in range(lowinit.number_direction):
        #	tree = hp.insert_chrom(ind.tree,X_training[i,:],subtree_chrom, IDlist)

        #tree_temp = hp.insert_chrom(ind.tree,X_training[2,:],subtree_chrom, IDlist)
        for i in range(lowinit.number_direction):
            tree = hp.insert_chrom(ind.tree, X_training[i, :], subtree_chrom,
                                   IDlist)
            #if i != 2:
            #	if tree == tree_temp:
            #		raise
            #pop[i].tree.childs[1].valueofnode.plot()
            [Substrate, polygons,
             centroid, poly_list, poly_list_type] = hp.get_all_para_for_hfss(
                 tree)  # get necessary parameters for genscript function.
            name = global_name + str(state.gen) + '_pop_' + str(
                state.population_num) + '_step_k' + str(k) + '_d_' + str(
                    i)  # name of directory would
            # be used to save .vbs and .hfss file.
            tabname = global_tabname + str(state.gen) + '_pop_' + str(
                state.population_num) + '_step_k' + str(k) + '_d_' + str(
                    i)  # name of directory
            # would be used to save .tab file.
            temppp.tree = tree
            temppp.nodelist = ind.nodelist
            temp, _, _ = hp.getChrom(temppp)
            print(X_training[i, :])
            print(".....")
            print(temp)
            for iiii in range(len(X_training[i, :])):
                if not (
                        X_training[i, iiii] == temp[iiii]
                ):  # this part is to test the insert and getchrom function.
                    raise
            genscript(Substrate, polygons, centroid, name + '.vbs', tabname,
                      name + '.hfss', poly_list, poly_list_type)
            f = open(name + '.txt', 'w')
            f.write(hp.tree2str(tree))
            f.close()
            saved_tree[i] = tree
            del tree
            del Substrate
            del polygons
            del centroid

        #raise ValueError("Finished testing")
        #######
        #  running all of the scripts.
        nameDir = global_name + str(state.gen) + '_pop_' + str(
            state.population_num) + '_step_k' + str(
                k) + '_d_'  # file name direction of the vbs file.
        hrun.RunPopScript(lowinit.number_direction, nameDir, 0,
                          len(init.PCnames), state)

        # getting the fitness of each
        for i in range(lowinit.number_direction):
            spec_nameDir_tab = global_tabname + str(state.gen) + '_pop_' + str(
                state.population_num) + '_step_k' + str(k) + '_d_' + str(
                    i) + '.tab'
            [m, n, p, q] = hrun.assignFitness(spec_nameDir_tab, state.gen)
            print('i ', i, '___', m)
            [y[i], return_loss[i]] = [m, n]
            if m < inGP.desired_fitness:
                shutil.copy2(
                    global_name + str(state.gen) + '_pop_' +
                    str(state.population_num) + '_step_k' + str(k) + '_d_' +
                    str(i) + '.vbs', ant.resultsDir)
                shutil.copy2(spec_nameDir_tab, ant.resultsDir)
                shutil.copy2(
                    global_name + str(state.gen) + '_pop_' +
                    str(state.population_num) + '_step_k' + str(k) + '_d_' +
                    str(i) + '.txt', ant.resultsDir)
                #hp.drawtree(pop[i].tree,ant.resultsDir + '_gen_' + str(gen) + '_pop_' + str(i))
                f = open(
                    ant.resultsDir + 'lowlevel_gen_' + str(state.gen) +
                    '_pop_' + str(state.population_num) + '_step_k' + str(k) +
                    '_d_' + str(i) + '.txt', 'w')
                #f.write(hp.tree2str(saved_tree[i]))
                #f.write('#')
                f.write('fitness: ' + str(m))
                f.write('#')
                if p:
                    f.write("_____exist best fitness")
                    if q:
                        f.write("___ that is better than overcome_desired")
                #f.write('time: ' + str((time.time() - first_time)/60))
                f.close()

        ###
        fitness_k = min(y)
        index = y.index(fitness_k)
        if fitness_k < fitness:
            for i in range(num):
                current_chromosome[i] = X_training[index][i]
            fitness = fitness_k
        else:
            anpha = anpha * lowinit.shrink  # shrink the anpha maybe because the stepsize is a little big.

    # np.savetxt('C:\\Opt_files\\lowlevel\\y.txt',y,delimiter = ',')
    # np.savetxt('C:\\Opt_files\\lowlevel\\X.txt',X_training,delimiter = ',')
    ind.fitness = fitness
    ind.tree = hp.insert_chrom(ind.tree, current_chromosome, subtree_chrom,
                               IDlist)
    state.lowlevel = False
    #del saved_tree

    return ind
def makeGP_prog(maxSub, maxPat, maxBlue, ismaxdep):
    # makeGP_prog makes a entire GP tree.
    # whre maxSub: the maximum depth of the genSub sub-tree.
    # maxPat: the maximum depth of the genPat sub-tree.
    # maxBlue: the maximum depth of the Blue sub-tree.
    # ismaxdep: specify whether GP tree will be created with maxdepth of all branch or not.
    GP_prog = gp.node()
    Sub = init.Sub()
    if init.Re_trainning:
        import update_state as us
        anten = init.AnT()
        Sub = init.Sub()
        L = init.L()
        U = init.U()
        low = init.lowlevel()
        GP = init.GP()
        #path = us.load_temporary_path()
        us.update_all_saved_parameters(anten, sub, L, U, GP, low)

    GP_prog.strname = 'GP_prog'
    GP_prog.childs = []
    GP_prog.funcORter = 'func'

    # firstly need to create the substrate tree.
    if maxSub == 1:
        # create addsub3 tree.
        gensub1 = gp.node()
        gensub1.strname = 'gensub1'
        gensub1.type = 4
        gensub1.childs = []
        gensub1.childs.append(gp.addsub3())
        gensub1.funcORter = 'func'
        GP_prog.childs.append(gensub1)
    else:  # when maxSub != 1.
        pass

    # calculate all of edge of substrate.
    GP_prog.childs[0].childs[0].valueofnode = []
    for i in range(3):
        GP_prog.childs[0].childs[0].valueofnode.append(
            GP_prog.childs[0].childs[0].childs[i].valueofnode)

    temp = GP_prog.childs[0].childs[0].valueofnode

    GP_prog.childs[0].valueofnode = []
    for i in range(3):
        # calculate all of the real substrate's parameters.
        if i == 0:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOx[1] - Sub.rangeOx[0]) + Sub.rangeOx[0],
                          4)  # Ox edge
        elif i == 1:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOy[1] - Sub.rangeOy[0]) + Sub.rangeOy[0],
                          4)  # Oy edge.
        else:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOz[1] - Sub.rangeOz[0]) + Sub.rangeOz[0],
                          4)  # Oz edge.
        GP_prog.childs[0].valueofnode.append(temp2)

    # Secondly create patterns.
    MaxX = GP_prog.childs[0].valueofnode[
        0] - Sub.decrease  ### real MaxX,Y are decreased 1mm before to create
    # any pattern unit(like L1,U1,U2,...).
    MaxY = GP_prog.childs[0].valueofnode[1] - Sub.decrease
    Zsize = GP_prog.childs[0].valueofnode[2]
    GP_prog.substrate_size = [MaxX + Sub.decrease, MaxY + Sub.decrease, Zsize]

    [tree, lastnode] = gp.makeBlueTree(maxBlue, ismaxdep, 0, MaxX, MaxY)
    fullbluetree = gp.genFullBlueTree(tree)

    fullbluetree = gp.updateFullBlueTree(fullbluetree, [MaxX, MaxY], 1)

    if maxPat == 1:
        # create
        genpat1 = gp.node()
        genpat1.strname = 'genpat1'
        genpat1.type = 5
        genpat1.childs = []
        bluetree1 = gp.node()
        bluetree1.strname = 'bluetree1'
        bluetree1.type = 2
        bluetree1.funcORter == 'func'
        bluetree1.childs = []
        bluetree1.childs.append(fullbluetree)
        genpat1.childs.append(bluetree1)
        genpat1.funcORter = 'func'
        GP_prog.childs.append(genpat1)
        GP_prog.childs[1].childs[0].valueofnode = gp.get_val_frombluetree(
            copy.deepcopy(fullbluetree))
        GP_prog.childs[1].valueofnode = GP_prog.childs[1].childs[0].valueofnode

    return GP_prog
Esempio n. 4
0
import InitPopMethods as initpop
import Helper as hp
from genscript import genscript
import matplotlib.pyplot as plt
# from testFunctionFitness import fitness
import os
import time
import shutil
import DS_lowOptimize as dslow
import ANN_lowOptimize as anlow

import helpRunning as hpr
######################################################### MAIN ####################################################33
lowlevel = init.lowlevel()
first_time = time.time()
inAnT = init.AnT(
)  # get the essential parameters of antenna from initglobal.py
mydir = inAnT.tmpTab
mydir_hfss = inAnT.tmpDir
filelist = [f for f in os.listdir(mydir) if f.endswith(".tab")]
for f in filelist:  # delete all before files.
    os.remove(os.path.join(mydir, f))

filelist = [
    f for f in os.listdir(mydir_hfss)
    if (f.endswith(".hfss") or f.endswith(".vbs") or f.endswith(".txt"))
]
for f in filelist:  # delete all before files.
    os.remove(os.path.join(mydir_hfss, f))


class state:  # define a state object to save some necessary results.
Esempio n. 5
0
def genscript(Substrate,polygons,centroid,tmpScriptFile,outFile,hfssFile,poly_list,poly_list_type):
	import initGlobal as init 
	anten =  init.AnT()
	sub = init.Sub()
	# this function create the vbs file.
	# input arguments:
	#			- Substrate: the list of edges of the substrate.
	#			- polygons: the list of all coordinates to help draw the patch. Got from the second output of
	#							Helper.get_all_para_for_hfss() function.

	if init.Re_trainning:
		import update_state as us 
		anten = init.AnT()
		sub = init.Sub()
		L   = init.L()
		U   = init.U()
		low = init.lowlevel()
		GP = init.GP()
		us.update_all_saved_parameters(anten, sub, L, U, GP, low)

	addition_number = sub.addition # increase the range of substrate.
	# frequency 
	c = anten.c
	fC = anten.fC
	fStart = anten.fStart
	fStop  = anten.fStop
	npoints = anten.npoints
	Lambda = (c/fC)*1000

	# radiation boundaries.
	#AirX = Nx*dAnt + Lambda/2
	#AirY = Ny*dAnt + Lambda/2
	AirZ = Lambda + Substrate[2] + 5 # 5 is the length of the coaxial cable.
	
	# solution parameters (GHz)
	

	# define some attributes of substrate.
	startX = centroid[0] - ((Substrate[0]+addition_number)/2) # the X original coordinate helps to draw the substrate.
	startY = centroid[1] - ((Substrate[1]+addition_number)/2) # the Y original coordinate helps to draw the substrate.
	length_W = Substrate[0] + addition_number # imply that it is the width_ox
	length_L = Substrate[1] + addition_number # imply that it is the length_oy
	centroidX_substrate = startX + length_W/2 # is the ox centroid coordinate of the substrate.
	centroidY_substrate = startY + length_L/2 # is the oy centroid coordinate of the substrate.
	####
	x_coaxial_cable_coordinate = centroidX_substrate + (length_W/2)/3.5
	y_coaxial_cable_coordinate = centroidY_substrate
	coaxial_check = geose.Point(x_coaxial_cable_coordinate,y_coaxial_cable_coordinate)
	checking = 0
	for i in range(len(polygons)):
		if poly_list[i].intersects(coaxial_check)[0]:
			checking = checking + 1

	if checking == 0:
		if poly_list_type[0] == 'L1' or poly_list_type[0] == 'L3' or poly_list_type[0] == 'L4' or poly_list_type[0] == 'U2' or poly_list_type[0] == 'U4':
			x_coaxial_cable_coordinate = (polygons[0][0,0] + polygons[0][2,0])/2
			y_coaxial_cable_coordinate = (polygons[0][0,1] + polygons[0][2,1])/2
		elif poly_list_type[0] == 'L2':
			x_coaxial_cable_coordinate = (polygons[0][5,0] + polygons[0][1,0])/2
			y_coaxial_cable_coordinate = (polygons[0][5,1] + polygons[0][1,1])/2
		elif poly_list_type[0] == 'U1':
			x_coaxial_cable_coordinate = (polygons[0][1,0] + polygons[0][3,0])/2
			y_coaxial_cable_coordinate = (polygons[0][1,1] + polygons[0][3,1])/2
		elif poly_list_type[0] == 'U3':
			x_coaxial_cable_coordinate = (polygons[0][7,0] + polygons[0][1,0])/2
			y_coaxial_cable_coordinate = (polygons[0][7,1] + polygons[0][1,1])/2

	'''
	#### check wheather the feed point is in range of patch.
	polygon_boundary = hp.getBoundary(polygons) # get the boundary of the patch.
	try:
		range_edges = hp.get2_suitable_edges_for_coaxial_cable(polygon_boundary,(centroidX_substrate,centroidY_substrate))
	except:
		pass

	#print(x_coaxial_cable_coordinate)
	#print(range_edges[1][1][1])
	
	# fix the coaxial point. 
	if range_edges != []:
		if len(range_edges) == 2:
			if (x_coaxial_cable_coordinate > range_edges[1][1][0]):
				# NOTE: this needs to revise because it does not include all of the case.
				#print(outFile)
				#print('__________')
				#x_coaxial_cable_coordinate = x_coaxial_cable_coordinate - (x_coaxial_cable_coordinate - range_edges[1][1][1]) - 2
				x_coaxial_cable_coordinate = (range_edges[1][1][0] - range_edges[0][1][0])/2
		else:
			if (x_coaxial_cable_coordinate > range_edges[-1][1][0]) or (x_coaxial_cable_coordinate > range_edges[-3][1][0] and x_coaxial_cable_coordinate < range_edges[-2][1][0]):
				x_coaxial_cable_coordinate = (range_edges[-1][1][0] - range_edges[-2][1][0])/2
	'''
	# open a temporary script file.
	# tmpScriptFile = 'tempPatch.vbs'
	fid = open(tmpScriptFile, 'w')

	# create a new HFSS project.
	hfss.hfssNewProject(fid)
	hfss.hfssInsertDesign(fid, 'NxN_uStrip_Patch')
	
	# Create substrate.
	hfss.hfssBox(fid, 'Substrate', [startX , startY , 0], [length_W, length_L, -Substrate[2]], 'mm')
	hfss.hfssAssignMaterial(fid,'Substrate',anten.substrate_material)
	name_all_polys = [] 
	for i in range(len(polygons)):
		# draw each polygon.
		hfss.hfssPolyline1(fid,'polygon'+str(i+1),polygons[i],'mm')
		name_all_polys.append('polygon' + str(i+1))
	if len(name_all_polys) != 1:
		hfss.hfssUnite(fid,name_all_polys)
	hfss.hfssRename(fid,'polygon1','patch') 
	hfss.hfssAssignPE(fid, 'Perf1', ['patch'], False)
	# draw a ground plane.
	hfss.hfssRectangle(fid, 'GroundPlane', 'Z', [startX,startY,-Substrate[2]], Substrate[0] + addition_number, Substrate[1]\
	 + addition_number, 'mm');
	#hfss.hfssAssignPE(fid, 'GND', ['GroundPlane']);



	# get the suitable coordinate of the coaxial cable.
	
	# draw the coaxial cable.
	hfss.hfssCircle(fid, 'Groundcir', 'Z', [x_coaxial_cable_coordinate, y_coaxial_cable_coordinate, -Substrate[2]], 1, 'mm')
	hfss.hfssSubtract(fid,['GroundPlane'],['Groundcir'])
	hfss.hfssAssignPE(fid, 'GND', ['GroundPlane'],False);

	hfss.hfssCylinder(fid, 'Cyl1', 'Z', [x_coaxial_cable_coordinate, y_coaxial_cable_coordinate,\
	 -Substrate[2]], 0.3, Substrate[2], 'mm')
	hfss.hfssAssignMaterial(fid,'Cyl1','copper')
	hfss.hfssCoaxialCable(fid, ['Cyl1_In', 'Cyl1_Er','Cyl1_Out'], 'Z', [x_coaxial_cable_coordinate, y_coaxial_cable_coordinate,\
	 -Substrate[2]-5], [0.3, 0.7, 1], 5, 'mm')
	hfss.hfssAssignMaterial(fid,'Cyl1_In','copper')
	hfss.hfssAssignMaterial(fid,'Cyl1_Er','air')
	hfss.hfssAssignMaterial(fid,'Cyl1_Out','copper')

	# feed.
	hfss.hfssCircle(fid,'feed','Z',[x_coaxial_cable_coordinate, y_coaxial_cable_coordinate, -Substrate[2]-5],0.7,'mm')
	
	hfss.hfssAssignLumpedPort(fid, 'Port1','feed', [x_coaxial_cable_coordinate, y_coaxial_cable_coordinate+0.7,\
	 -Substrate[2]-5], [x_coaxial_cable_coordinate, y_coaxial_cable_coordinate+0.3, -Substrate[2]-5], 'mm')

	# draw radiation boundaries.
	hfss.hfssBox(fid, 'AirBox', [startX - Lambda/4, startY - Lambda/4, -5 - Lambda/2 - Substrate[2]], [length_W + Lambda/2,\
	 length_L + Lambda/2, AirZ], 'mm'); 
	hfss.hfssAssignRadiation(fid, 'ABC', 'AirBox');
	hfss.hfssSetTransparency(fid, ['AirBox'], 0.95);

	############################ insert solution.
	hfss.hfssInsertSolution(fid, 'Solution1', fC/1e9)
	hfss.hfssInterpolatingSweep(fid, 'Sweep1', 'Solution1',fStart, fStop, npoints)

	# Create return loss report (new HFSS-API)
	hfss.hfssCreateReport1(fid,'ReturnLoss',1,1,'Solution1',\
	    ['Freq'],['Freq','db(S(Port1,Port1))'],'Sweep1','NULL','Sweep')
	    # Save the project to a temporary file and solve it.
	
	#hfss.hfssSolveSetup(fid, 'Solution1');
	
	#Export the S11 report to .tab file

	# solve. 
	hfss.hfssSolveSetup(fid, 'Solution1')
	#hfss.hfssSaveProject(fid, hfssFile, anten.hfss_save);
	hfss.hfssExportToFile(fid, 'ReturnLoss', outFile, 'tab')

	fid.close()
import HFSS as hfss
import numpy as np
import Helper as hp
import initGlobal as init

anten = init.AnT()
sub = init.Sub()


def genscript(Substrate, polygons, centroid, tmpScriptFile, outFile, hfssFile):
    # this function create the vbs file.
    # input arguments:
    #			- Substrate: the list of edges of the substrate.
    #			- polygons: the list of all coordinates to help draw the patch. Got from the second output of
    #							Helper.get_all_para_for_hfss() function.

    addition_number = sub.addition  # increase the range of substrate.
    # frequency.
    c = anten.c
    fC = anten.fC
    fStart = anten.fStart
    fStop = anten.fStop
    npoints = anten.npoints
    Lambda = (c / fC) * 1000

    # radiation boundaries.
    #AirX = Nx*dAnt + Lambda/2
    #AirY = Ny*dAnt + Lambda/2
    AirZ = Lambda + Substrate[2] + 5  # 5 is the length of the coaxial cable.

    # solution parameters (GHz)
# this file defines all of genetic operators used in GP process.
#						include:- crossover(pop,proRed,prosubBlue,proBlue,proSubstrate,proGensub,proGenpat)
#								- mutaion(pop,proRed,prosubBlue,proBlue,proSubstrate,proGensub,proGenpat)
#								- update_tree_after_GP_operation(GP_prog,nodeID,typeChange) # to help two above functions.
# [email protected] - 2018
import Helper as hp
import copy
import initGlobal as init
import GP as gp
import random
inGP = init.GP()
if init.Re_trainning:
    import update_state as us
    AnT = init.AnT()
    Sub = init.Sub()
    L = init.L()
    U = init.U()
    low = init.lowlevel()
    inGP = init.GP()
    #path = us.load_temporary_path()
    us.update_all_saved_parameters(AnT, Sub, L, U, inGP, low)


def crossover(pop, state, proRed, prosubBlue, proBlue, proSubstrate, proGensub,
              proGenpat):
    # input arguments:
    #			POP - the population need be applied GP operators.
    #			PRORED - the probality whether the red node is picked to apply GP operators.
    #			PROSUBBLUE - _____________________ subblue node ______________________________.
    #			PROBLUE - ________________________ bluetree node______________________________.
    #			...............................................................................
Esempio n. 8
0
#[email protected] 2018
import Helper as hp 
import initGlobal as init
import numpy as np
import os
from genscript import genscript
import copy 
import random
import matplotlib.pyplot as plt
import helpRunning as hrun 
lowinit = init.lowlevel()
ant = init.AnT()
class temppp:
	pass
def lowlevel_optimizer(ind,state,pop_num):
	# the inputs: - IND  individual
	# 			  - STATE
	#			  - POP_NUM the specified ID of current individual which be optimized in here.
	state.lowlevel = True
	global_name = lowinit.tmpDir + ant.Antenna_Name + '_gen_'
	global_tabname = lowinit.tmpTab + ant.Antenna_Name + '_gen_'
	print('running low-level optimizer for generation ',state.gen,'population ', pop_num)
	chromosome, subtree_chrom, IDlist = hp.getChrom(ind) # get chromosome from tree and other atributes.

	num = len(chromosome) # number of values will be optimized.

	# create randomly the trainning data for ANN.

	y = np.zeros(lowinit.number_sample+1)
	y[0] = ind.fitness  # save original chromosome fitness.
	return_loss = []
def insert_chrom(or_tree, chromosome, subtree_chrom_, IDlist):
    # insert_chrom function is used to insert the red nodes into suitable tree.
    #   tree: is the tree need be inserted after the red nodes extracted.
    #   chromosome: is the list that saves all extracted values of red nodes.
    #   subtree_chrom: is the list that save all extracted red nodes.
    #   IDlist: is the list that save all ID of the extracted node.
    #       Note: The tree is used as the input of this function need be deepcopy before.
    import initGlobal as init
    Sub = init.Sub()
    if init.Re_trainning:
        import update_state as us
        AnT = init.AnT()
        #Sub = init.Sub()
        L = init.L()
        U = init.U()
        low = init.lowlevel()
        GP = init.GP()
        #path = us.load_temporary_path()
        us.update_all_saved_parameters(AnT, Sub, L, U, GP, low)

    tree = copy.deepcopy(or_tree)
    subtree_chrom = copy.deepcopy(subtree_chrom_)
    #drawtree(tree)

    length = len(chromosome)

    for i in range(length):
        subtree_chrom[i].valueofnode = chromosome[
            i]  # insert all values into subtree_chrom before insert to GP_tree(tree).

    for i in range(len(chromosome)):
        tree = replaceSubtree(tree, subtree_chrom[i], IDlist[i])
        #drawNodeIDs(tree)
    ## update tree (substrate layer).
    UpdateNodeIDs(tree, 0)
    #drawtree(tree)
    tree.childs[0].childs[0].valueofnode = []
    for i in range(len(tree.childs[0].childs[0].childs)
                   ):  # resave the sizes of substrate layer into addsub3 node.
        tree.childs[0].childs[0].valueofnode.append(
            tree.childs[0].childs[0].childs[i].valueofnode)
    temp = tree.childs[0].childs[
        0].valueofnode  # save the sizes of substrate layer into TEMP variable.

    tree.childs[0].valueofnode = []
    for i in range(3):
        # calculate all of the real substrate's parameters.
        if i == 0:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOx[1] - Sub.rangeOx[0]) + Sub.rangeOx[0],
                          4)  # Ox edge
        elif i == 1:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOy[1] - Sub.rangeOy[0]) + Sub.rangeOy[0],
                          4)  # Oy edge.
        else:
            temp2 = round(((temp[i] + 1) / 2) *
                          (Sub.rangeOz[1] - Sub.rangeOz[0]) + Sub.rangeOz[0],
                          4)  # Oz edge.
        tree.childs[0].valueofnode.append(temp2)

    # Secondly create patterns.
    MaxX = tree.childs[0].valueofnode[
        0] - Sub.decrease  ### real MaxX,Y are decreased 1mm before to create
    # any pattern unit(like L1,U1,U2,...).
    MaxY = tree.childs[0].valueofnode[1] - Sub.decrease
    Zsize = tree.childs[0].valueofnode[2]
    tree.substrate_size = [MaxX + Sub.decrease, MaxY + Sub.decrease, Zsize]
    MaxXY = [MaxX - Sub.decrease, MaxY - Sub.decrease]
    ResetSynthesischeck(tree.childs[1].childs[0].childs[0],
                        tree.childs[1].childs[0].childs[0].nodeID)
    tree.childs[1].childs[0].childs[0] = gp.updateFullBlueTree(
        tree.childs[1].childs[0].childs[0], MaxXY, 4)
    tree.childs[1].childs[0].valueofnode = gp.get_val_frombluetree(
        copy.deepcopy(tree.childs[1].childs[0].childs[0]))
    tree.childs[1].valueofnode = tree.childs[1].childs[0].valueofnode

    del subtree_chrom
    del temp
    del temp2

    return tree