From 39f72829a7075f358fd1d1f3e63ec78256064321 Mon Sep 17 00:00:00 2001 From: vintache-d <damien.vintache@univ-nantes.fr> Date: Mon, 13 Nov 2017 17:49:24 +0100 Subject: [PATCH 1/2] pep8 Style Guide for Python Code --- HelperClass.py | 198 +++++++++++++++++++++++------------------- TestVLP.py | 15 ++-- TestVLP2.py | 200 ++++++++++++++++++++++--------------------- setup.py | 29 +++---- test_benpy.py | 2 +- test_benpy_simple.py | 3 +- 6 files changed, 233 insertions(+), 214 deletions(-) diff --git a/HelperClass.py b/HelperClass.py index 8486303..36ead5d 100644 --- a/HelperClass.py +++ b/HelperClass.py @@ -5,10 +5,12 @@ Created on Thu May 4 15:35:50 2017 Construct Ecosystem system @author: mbudinich """ -#import cobra +# import cobra import numpy as np from scipy.sparse import lil_matrix, find -#%% +# %% + + class VlpProblem: def __init__(self, B=None, a=None, b=None, l=None, s=None, P=None, Y=None, Z=None, c=None, opt_dir=None): self.B = B @@ -22,15 +24,15 @@ class VlpProblem: self.c = c self.opt_dir = opt_dir - def to_file(self,filename=None): #VLP is 1 based, constraint numbering starts at 1!! + def to_file(self, filename=None): # VLP is 1 based, constraint numbering starts at 1!! def getlen(obj): return 0 if obj is None else len(obj) - + if filename is None: raise RuntimeError("No filename given") - if hasattr(self,'ub') and not hasattr(self,'s'): + if hasattr(self, 'ub') and not hasattr(self, 's'): self.s = self.ub - if hasattr(self,'lb') and not hasattr(self,'l'): + if hasattr(self, 'lb') and not hasattr(self, 'l'): self.l = self.lb if self.opt_dir is None: self.opt_dir = 1 @@ -42,129 +44,138 @@ class VlpProblem: # raise RuntimeError('Matrix B has no shape attribute') # if not hasattr(self.P,'shape'): # raise RuntimeError('Matrix P has no shape attribute') - (m,n) = self.B.shape - (q,p) = self.P.shape + (m, n) = self.B.shape + (q, p) = self.P.shape if (n != p): raise RuntimeError('B and P must have same number of columns') - [A_rows,A_cols,A_vals]=find(lil_matrix(self.B)) - k=len(A_rows) - [P_rows,P_cols,P_vals]=find(lil_matrix(self.P)) - k1=len(P_rows) - kstr='' + [A_rows, A_cols, A_vals] = find(lil_matrix(self.B)) + k = len(A_rows) + [P_rows, P_cols, P_vals] = find(lil_matrix(self.P)) + k1 = len(P_rows) + kstr = '' if self.Y is not None and self.Y.shape[1] > 0: - [K_rows,K_cols,K_vals]=find(lil_matrix(self.Y)) - k2=len(K_rows) - kstr=' cone {} {}'.format(self.Y.shape[1],k2) + [K_rows, K_cols, K_vals] = find(lil_matrix(self.Y)) + k2 = len(K_rows) + kstr = ' cone {} {}'.format(self.Y.shape[1], k2) elif self.Z is not None and self.Z.shape[1] > 0: - [K_rows,K_cols,K_vals] = find(lil_matrix(self.Z)) + [K_rows, K_cols, K_vals] = find(lil_matrix(self.Z)) k2 = len(K_rows) - kstr=' dualcone {} {}'.format(self.Z.shape[1],k2) + kstr = ' dualcone {} {}'.format(self.Z.shape[1], k2) else: - k2=0 - - opt_dir_str='' - if self.opt_dir==1: + k2 = 0 + + opt_dir_str = '' + if self.opt_dir == 1: opt_dir_str = 'min' - elif self.opt_dir==-1: + elif self.opt_dir == -1: opt_dir_str = 'max' else: - raise RuntimeError('Invalid value for opt_dir: use -1 or 1 for maximitation and minimization') - + raise RuntimeError( + 'Invalid value for opt_dir: use -1 or 1 for maximitation and minimization') + try: - file = open(filename,'w') + file = open(filename, 'w') except OSError as e: print("OS error: {0}".format(e)) raise - #Write 'p', 'a', 'k' to file - file.write("p vlp {} {} {} {} {} {}{}\n".format(opt_dir_str,m,n,k,q,k1,kstr)) + # Write 'p', 'a', 'k' to file + file.write("p vlp {} {} {} {} {} {}{}\n".format( + opt_dir_str, m, n, k, q, k1, kstr)) for i in list(range(k)): - file.write("a {} {} {}\n".format(A_rows[i]+1,A_cols[i]+1,A_vals[i])) + file.write("a {} {} {}\n".format( + A_rows[i] + 1, A_cols[i] + 1, A_vals[i])) for i in list(range(k1)): - file.write("o {} {} {}\n".format(P_rows[i]+1,P_cols[i]+1,P_vals[i])) + file.write("o {} {} {}\n".format( + P_rows[i] + 1, P_cols[i] + 1, P_vals[i])) for i in list(range(k2)): - file.write("k {} {} {}\n".format(K_rows[i]+1,K_cols[i]+1,K_vals[i])) + file.write("k {} {} {}\n".format( + K_rows[i] + 1, K_cols[i] + 1, K_vals[i])) # duality parameter vector - + if self.c is not None: - if(len(np.array(self.c).shape) != 1 ) or (len(self.c)!=q) : + if(len(np.array(self.c).shape) != 1) or (len(self.c) != q): raise RuntimeError('c has wrong dimension') for i in range(q): - file.write("k {} 0 {}\n".format(i+1,self.c[i])) - - #Write row + file.write("k {} 0 {}\n".format(i + 1, self.c[i])) + + # Write row if (len(np.array(self.a).shape) > 1): raise RuntimeError('a has wrong dimension') if (len(np.array(self.b).shape) > 1): raise RuntimeError('b has wrong dimension') - m1 = max(getlen(self.a),getlen(self.b)) + m1 = max(getlen(self.a), getlen(self.b)) if self.a is None: - aa = -np.inf*np.ones((m1,1)) + aa = -np.inf * np.ones((m1, 1)) else: aa = self.a if self.b is None: - bb = np.inf*np.ones((m1,1)) + bb = np.inf * np.ones((m1, 1)) else: bb = self.b - + for i in list(range(m1)): if aa[i] < bb[i]: - ch = 2*np.isfinite(aa[i]) + np.isfinite(bb[i]) + ch = 2 * np.isfinite(aa[i]) + np.isfinite(bb[i]) if ch == 0: - file.write('i {} f \n'.format(i+1)) + file.write('i {} f \n'.format(i + 1)) elif ch == 1: - file.write('i {} u {}\n'.format(i+1,bb[i])) + file.write('i {} u {}\n'.format(i + 1, bb[i])) elif ch == 2: - file.write('i {} l {}\n'.format(i+1,aa[i])) + file.write('i {} l {}\n'.format(i + 1, aa[i])) elif ch == 3: - file.write('i {} d {} {}\n' .format(i+1,aa[i],bb[i])) + file.write('i {} d {} {}\n' .format(i + 1, aa[i], bb[i])) else: raise RuntimeError("Bad ch switch for constrains bounds") elif aa[i] == bb[i] and np.isfinite(aa[i]): - file.write('i %d s %g\n',i,aa[i]) + file.write('i %d s %g\n', i, aa[i]) else: - raise RuntimeError('Invalid constrsaints: a[{}]={}, b[{}]={}'.format(i+1,aa[i],i,bb[i])) - - #Write cols + raise RuntimeError( + 'Invalid constrsaints: a[{}]={}, b[{}]={}'.format(i + 1, aa[i], i, bb[i])) + + # Write cols if self.l is None: - llb=-np.inf*np.ones((n,1)) + llb = -np.inf * np.ones((n, 1)) else: - llb=self.l - + llb = self.l + if self.s is None: - uub= np.inf*np.ones((n,1)) + uub = np.inf * np.ones((n, 1)) else: - uub= self.s - + uub = self.s + for j in range(n): if llb[j] < uub[j]: - ch = 2*np.isfinite(llb[j]) + np.isfinite(uub[j]) + ch = 2 * np.isfinite(llb[j]) + np.isfinite(uub[j]) if ch == 0: - file.write('j {} f \n'.format(j+1)) + file.write('j {} f \n'.format(j + 1)) elif ch == 1: - file.write('j {} u {}\n'.format(j+1,uub[j])) + file.write('j {} u {}\n'.format(j + 1, uub[j])) elif ch == 2: - file.write('j {} l {}\n'.format(j+1,llb[j])) + file.write('j {} l {}\n'.format(j + 1, llb[j])) elif ch == 3: - file.write('j {} d {} {}\n' .format(j+1,llb[j],uub[j])) + file.write('j {} d {} {}\n' .format(j + 1, llb[j], uub[j])) else: raise RuntimeError("Bad ch switch for variable bounds") elif llb[j] == uub[j] and np.isfinite(llb[j]): - file.write('i %d s %g\n',j+1,llb[j]) + file.write('i %d s %g\n', j + 1, llb[j]) else: - raise RuntimeError('Invalid constrsaints: l[{}]={}, s[{}]={}'.format(j+1,llb[j],i,uub[j])) + raise RuntimeError('Invalid constrsaints: l[{}]={}, s[{}]={}'.format( + j + 1, llb[j], i, uub[j])) file.write('e ') file.close() -#%% +# %% + + class EcosystemModel: - from scipy.sparse import lil_matrix, block_diag, eye - - def __init__(self,model_array=None,metabolic_dict=None): + from scipy.sparse import lil_matrix, block_diag, eye + + def __init__(self, model_array=None, metabolic_dict=None): """Instatiate the EcosystemModel object model_array is an array of cobra models to connect metabolic_dict is a dicctionary where its keys correspond to metabolites id's and their values to the name equivalence""" - self.models=model_array + self.models = model_array self.metabolic_dict = metabolic_dict self._pooldict = None self.pool_ex_rxns = None @@ -178,57 +189,64 @@ class EcosystemModel: def construct_ecosystem_pool(self): """Check all metabolites used in import/export exchanges and construct the pool compartment""" - pooldict=dict() + pooldict = dict() for model in self.models: for rxn_ex in model.exchanges: for met_ex in rxn_ex.metabolites: met_name = self.metabolic_dict[met_ex.id] - if met_name not in pooldict: - pooldict[met_name]=[(model,rxn_ex,rxn_ex.get_coefficient(met_ex.id))] + if met_name not in pooldict: + pooldict[met_name] = [ + (model, rxn_ex, rxn_ex.get_coefficient(met_ex.id))] else: - pooldict[met_name].append((model,rxn_ex,rxn_ex.get_coefficient(met_ex.id))) - self._pooldict = pooldict + pooldict[met_name].append( + (model, rxn_ex, rxn_ex.get_coefficient(met_ex.id))) + self._pooldict = pooldict def populate_ecosystem_model(self): """Calculate the object attributes after pool construction""" - self.pool_ex_rxns = ["EX_{}:pool".format(key) for key in self._pooldict.keys()] - self.pool_ex_mets = ["{}:pool".format(key) for key in self._pooldict.keys()] - self.sysreactions = ["{}:{}".format(r.id,model.id) for model in self.models for r in model.reactions] - self.sysmetabolites = ["{}:{}".format(m.id,model.id) for model in self.models for m in model.metabolites] + self.pool_ex_rxns = ["EX_{}:pool".format( + key) for key in self._pooldict.keys()] + self.pool_ex_mets = ["{}:pool".format( + key) for key in self._pooldict.keys()] + self.sysreactions = ["{}:{}".format( + r.id, model.id) for model in self.models for r in model.reactions] + self.sysmetabolites = ["{}:{}".format( + m.id, model.id) for model in self.models for m in model.metabolites] self.sysreactions.extend(self.pool_ex_rxns) self.sysmetabolites.extend(self.pool_ex_mets) array_form = [model.to_array_based_model() for model in self.models] self.Ssigma = block_diag([model.S for model in array_form]) - self.Ssigma = lil_matrix(block_diag([self.Ssigma,-eye(len(self.pool_ex_rxns))])) + self.Ssigma = lil_matrix(block_diag( + [self.Ssigma, -eye(len(self.pool_ex_rxns))])) for met in self._pooldict.keys(): met_name = "{}:pool".format(met) met_idx = self.sysmetabolites.index(met_name) - for model,reaction,coeff in self._pooldict[met]: - rxn_name = "{}:{}".format(reaction.id,model.id) + for model, reaction, coeff in self._pooldict[met]: + rxn_name = "{}:{}".format(reaction.id, model.id) rxn_idx = self.sysreactions.index(rxn_name) - self.Ssigma[met_idx,rxn_idx]=-coeff - - def add_comparment(self,model): + self.Ssigma[met_idx, rxn_idx] = -coeff + + def add_comparment(self, model): """Utility function to add a new agent to models. Pretty ineficient, re-runs all the steps again for each addition""" - self.__init__(self.model_array.add(model),self.metabolic_dict) + self.__init__(self.model_array.add(model), self.metabolic_dict) self.construct_ecosystem_pool() self.populate_ecosystem_model() - + @staticmethod def get_common_mets(model_list): """Naive implementation of getting common exchange metabolites, using their id's""" - common_mets=dict() + common_mets = dict() for model in model_list: for rxn_ex in model.exchanges: for met_ex in rxn_ex.metabolites: if met_ex.id not in common_mets: - common_mets[met_ex.id]=dict([(model,rxn_ex)]) + common_mets[met_ex.id] = dict([(model, rxn_ex)]) else: - common_mets[met_ex.id][model]=rxn_ex + common_mets[met_ex.id][model] = rxn_ex return(common_mets) -#%% - +# %% + -#%% +# %% diff --git a/TestVLP.py b/TestVLP.py index 463150f..05416db 100644 --- a/TestVLP.py +++ b/TestVLP.py @@ -9,7 +9,7 @@ Created on Wed May 31 15:45:22 2017 # Example: MOLP with 2 objectives, simplest example # min [x1 - x2; x1 + x2] -# +# # 6 <= 2*x1 + x2 # 6 <= x1 + 2*x2 # @@ -18,13 +18,13 @@ Created on Wed May 31 15:45:22 2017 import numpy as np from benpy import solve as bensolve, vlpProblem, vlpSolution -#%% +# %% vlp = vlpProblem() -vlp.B=np.matrix([[2,1],[1,2]]) # coefficient matrix -vlp.a=[6,6] # lower bounds -vlp.P=np.matrix([[1,-1],[1,1]]); # objective matrix -vlp.l=[0,0]; # lower variable bounds +vlp.B = np.matrix([[2, 1], [1, 2]]) # coefficient matrix +vlp.a = [6, 6] # lower bounds +vlp.P = np.matrix([[1, -1], [1, 1]]) # objective matrix +vlp.l = [0, 0] # lower variable bounds vlp.default_options() @@ -33,6 +33,3 @@ vlp.to_string() vlp.to_file('test01.vlp') sol = bensolve(vlp) - - - diff --git a/TestVLP2.py b/TestVLP2.py index b81063c..95e2202 100644 --- a/TestVLP2.py +++ b/TestVLP2.py @@ -5,29 +5,29 @@ Created on Wed May 31 15:45:22 2017 Test VLP interfase with bensolve @author: mbudinich """ -#%% +# %% from numpy import transpose, ones, zeros, eye, matrix, loadtxt, append, hstack, vstack, inf from HelperClass import VlpProblem -#%% +# %% # Example: MOLP with 2 objectives, simplest example # min [x1 - x2; x1 + x2] -# +# # 6 <= 2*x1 + x2 # 6 <= x1 + 2*x2 # # x1 >= 0 # x2 >= 0 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([[2,1],[1,2]]) # coefficient matrix -vlp.a=[6,6] # lower bounds -vlp.P=matrix([[1,-1],[1,1]]) # objective matrix -vlp.l=[0,0] # lower variable bounds +vlp.B = matrix([[2, 1], [1, 2]]) # coefficient matrix +vlp.a = [6, 6] # lower bounds +vlp.P = matrix([[1, -1], [1, 1]]) # objective matrix +vlp.l = [0, 0] # lower variable bounds -vlp.to_file('ex01.vlp'); -#%% +vlp.to_file('ex01.vlp') +# %% # Example: MOLP with 2 objectives which is infeasible # v-min [x1;x2] @@ -36,15 +36,15 @@ vlp.to_file('ex01.vlp'); # 0 <= x1 + 2*x2 <= 1 # 1 <= x1 + x2 <= 2 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([[3,1],[1,2],[1,1]]) -vlp.b=[1, 1, 2] -vlp.a=[0, 0, 1] -vlp.P=matrix([[1,0],[0,1]]) +vlp.B = matrix([[3, 1], [1, 2], [1, 1]]) +vlp.b = [1, 1, 2] +vlp.a = [0, 0, 1] +vlp.P = matrix([[1, 0], [0, 1]]) -vlp.to_file('ex02.vlp'); -#%% +vlp.to_file('ex02.vlp') +# %% # Example: MOLP with 2 objectives the upper image of which has no vertex # v-min [x1;x2] @@ -52,14 +52,14 @@ vlp.to_file('ex02.vlp'); # 1 <= x1 + x2 + x3 # 1 <= x1 + x2 - x3 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([[1,1,1],[1,1,-1]]) -vlp.a=[1,1] -vlp.P=matrix([[1,0,0], [0,1,0]]) +vlp.B = matrix([[1, 1, 1], [1, 1, -1]]) +vlp.a = [1, 1] +vlp.P = matrix([[1, 0, 0], [0, 1, 0]]) -vlp.to_file('ex03.vlp'); -#%% +vlp.to_file('ex03.vlp') +# %% # Example: MOLP with 2 objectives, which is totally unbounded # v-min [x1;x2] @@ -67,27 +67,28 @@ vlp.to_file('ex03.vlp'); # 1 <= x1 + x2 + x3 # 1 <= x1 + x2 + 2*x3 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([[1,1,1],[1,1,2]]); -vlp.a=[1,1] -vlp.P=matrix([[1,0,0], [0,1,0]]); +vlp.B = matrix([[1, 1, 1], [1, 1, 2]]) +vlp.a = [1, 1] +vlp.P = matrix([[1, 0, 0], [0, 1, 0]]) -vlp.to_file('ex04.vlp'); -#%% +vlp.to_file('ex04.vlp') +# %% # Example: VLP with q = 3 and 4 generating vectors of C # see http://bensolve.org/demo.html -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([ones((1,3)).tolist()[0],[1,2,2],[2,2,1],[2,1,2]]) # coefficient matrix -vlp.a=[1,3/2,3/2,3/2]; # lhs of constraints -vlp.P=matrix([[1,0,1],[1,1,0],[0,1,1]]) # objective matrix -vlp.l=[0,0,0] # lower variable bounds +vlp.B = matrix([ones((1, 3)).tolist()[0], [1, 2, 2], [ + 2, 2, 1], [2, 1, 2]]) # coefficient matrix +vlp.a = [1, 3 / 2, 3 / 2, 3 / 2] # lhs of constraints +vlp.P = matrix([[1, 0, 1], [1, 1, 0], [0, 1, 1]]) # objective matrix +vlp.l = [0, 0, 0] # lower variable bounds # generating vectors of ordering cone C -vlp.Y=transpose(matrix([[1,0,0], [0,1,0], [-1,0,2], [0,-1,2]])) +vlp.Y = transpose(matrix([[1, 0, 0], [0, 1, 0], [-1, 0, 2], [0, -1, 2]])) # alternative variant: generating vectors of the dual of the ordering cone C # vlp.Z=[2 2 1 ; 2 0 1 ; 0 0 1 ; 0 2 1]'; @@ -95,59 +96,61 @@ vlp.Y=transpose(matrix([[1,0,0], [0,1,0], [-1,0,2], [0,-1,2]])) # duality parameter vector (must belong to interior of C) # if not given, it is computed automatically # dual problem depends on c -vlp.c=[1,1,1] +vlp.c = [1, 1, 1] vlp.to_file('ex05.vlp') -#%% +# %% # Example: VLP with 2 objectives # max [x1 - x2; x1 + x2] # # w.r.t. cone C ={(y1,y2) | 2 y1 -y2 >= 0, -y1 + 2 y2 >= 0} -# -# 1 <= x1 + x2 <= 2 +# +# 1 <= x1 + x2 <= 2 # # 0 <= x1 <= 1 # 0 <= x2 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.opt_dir=-1 # maximization -vlp.Z=matrix([[2,-1], [-1,2]]) # generators of dual of ordering cone -vlp.c=[1,1] # geometric duality parameter vector (belongs to interior of C) +vlp.opt_dir = -1 # maximization +vlp.Z = matrix([[2, -1], [-1, 2]]) # generators of dual of ordering cone +vlp.c = [1, 1] # geometric duality parameter vector (belongs to interior of C) -vlp.B=matrix([1,1]) # coefficient matrix -vlp.a=[1] # lhs -vlp.b=[2] # rhs -vlp.l=[0,0] # lower bounds -vlp.s=[1,inf] # upper bounds -vlp.P=matrix([[1,-1],[1,1]]) # objective matrix +vlp.B = matrix([1, 1]) # coefficient matrix +vlp.a = [1] # lhs +vlp.b = [2] # rhs +vlp.l = [0, 0] # lower bounds +vlp.s = [1, inf] # upper bounds +vlp.P = matrix([[1, -1], [1, 1]]) # objective matrix -vlp.to_file('ex06.vlp'); -#%% +vlp.to_file('ex06.vlp') +# %% # Example: MOLP with 3 objectives, 1211 constraints and 1143 variables # # Example (PL) in -# +# # Shao, L., Ehrgott, M.: Approximately solving multiobjective linear programmes in objective space and # an application in radiotherapy treatment planning. Math. Methods Oper. Res. 68(2), 257Ð276 (2008) # # enlarge epsilon in phase 2 and use primal simplex algorithm, for instance, run # ./bensolve ex/ex07.vlp -m 2 -e 0.05 -l primal_simplex -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=loadtxt('example07.txt'); -vlp.P = -1*matrix([append(zeros((1,1140)),[-1,0,0]),append(zeros((1,1140)),[0,-1,0]),append(zeros((1,1140)),[0,0,-1])]) -vlp.l = append(zeros((1140,1)),[0,-45,0]) -vlp.s = append(inf*ones((1140,1)),[17.07,12,90.64]) -vlp.b = vstack((90.64*ones((67,1)),-85.3601*ones((67,1)),60*ones((37,1)),45*ones((8,1)),60*ones((46,1)),ones((986,1)))) +vlp.B = loadtxt('example07.txt') +vlp.P = -1 * matrix([append(zeros((1, 1140)), [-1, 0, 0]), append( + zeros((1, 1140)), [0, -1, 0]), append(zeros((1, 1140)), [0, 0, -1])]) +vlp.l = append(zeros((1140, 1)), [0, -45, 0]) +vlp.s = append(inf * ones((1140, 1)), [17.07, 12, 90.64]) +vlp.b = vstack((90.64 * ones((67, 1)), -85.3601 * ones((67, 1)), 60 * + ones((37, 1)), 45 * ones((8, 1)), 60 * ones((46, 1)), ones((986, 1)))) vlp.b = vlp.b.T.tolist()[0] -vlp.to_file('ex07.vlp'); -#%% +vlp.to_file('ex07.vlp') +# %% # Example: VLP with 2 objectives, which is unbounded (but not totally unbounded) # -# its the solution consists of feasible points and feasible directions +# its the solution consists of feasible points and feasible directions # min_C [x1;x2] # @@ -155,22 +158,22 @@ vlp.to_file('ex07.vlp'); # # duality parameter c is set to [0;1], which is an interior point of C # -# 0 <= 3*x1 + x2 -# 0 <= x1 + 2*x2 -# 1 <= x1 + x2 +# 0 <= 3*x1 + x2 +# 0 <= x1 + 2*x2 +# 1 <= x1 + x2 -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([3,1],[1,2],[1,1]) -vlp.a=[0, 0, 1] -vlp.P=[[1,0] , [0,1]]; +vlp.B = matrix([3, 1], [1, 2], [1, 1]) +vlp.a = [0, 0, 1] +vlp.P = [[1, 0], [0, 1]] # generating vectors of ordering cone C -vlp.Y=matrix([[-1,3], [3/2,-1]]) -vlp.c=[0,1] +vlp.Y = matrix([[-1, 3], [3 / 2, -1]]) +vlp.c = [0, 1] -vlp.to_file('ex08.vlp'); -#%% +vlp.to_file('ex08.vlp') +# %% # VLP with 3 objectives, 4608 constrains and 36939 variables # # Example 6.6 in @@ -180,7 +183,7 @@ vlp.to_file('ex08.vlp'); # special options are necessary to run example: # # For instance, run - # ./bensolve ex/ex09.vlp -e 1e-2 -m 3 -L primal_simplex -l primal_simplex -p +# ./bensolve ex/ex09.vlp -e 1e-2 -m 3 -L primal_simplex -l primal_simplex -p # # (-e: set epsilon in Phase 2) # (-m set message level to have more output on screen) @@ -196,11 +199,11 @@ vlp.to_file('ex08.vlp'); # (-a use dual Benson algorithm in Phase 2) # (-p generate graphics files) -#vlp = VlpProblem(); -#load('example09'); -#vlp.c=[1,1,1] -#vlp.to_file('ex09.vlp'); -#%% +# vlp = VlpProblem(); +# load('example09'); +# vlp.c=[1,1,1] +# vlp.to_file('ex09.vlp'); +# %% # The 'bensolvehedron', see the titlepage of the reference manual # # MOLP with q objectives, n=(q+2*m)^q variables and constraints @@ -213,36 +216,37 @@ vlp.to_file('ex08.vlp'); # add green color (!) # adapt q and m to generate other (larger) problems -#q=3; -#m=2; +# q=3; +# m=2; -#n=(q+2*m)^q; +# n=(q+2*m)^q; -#vlp = VlpProblem(); +# vlp = VlpProblem(); # feasible set is n dimensional hyper cube -#vlp.B=eye(n) -#vlp.a=zeros((n,1)) -#vlp.b=ones((n,1)) +# vlp.B=eye(n) +# vlp.a=zeros((n,1)) +# vlp.b=ones((n,1)) # objective map -#P=zeros(n,q); -#for i in range(n): -# line = dec2base(i-1,q+2*m,q)-'0'; -# line = line - (q+2*m-1)/2; -# P[i,:] = line +# P=zeros(n,q); +# for i in range(n): +# line = dec2base(i-1,q+2*m,q)-'0'; +# line = line - (q+2*m-1)/2; +# P[i,:] = line -#vlp.P = transpose(P) +# vlp.P = transpose(P) -#vlp.to_file('ex10.vlp'); -#%% +# vlp.to_file('ex10.vlp'); +# %% # Example: MOLP with q=5, unbounded, # recession cone of upper image has 22 extreme directions (main effort in phase 1) -vlp = VlpProblem(); +vlp = VlpProblem() -vlp.B=matrix([[1,1,1,1,1],[2,1,1,1,1],[1,2,1,1,1],[1,1,2,1,1],[1,1,1,2,1],[1,1,1,1,2],[2,2,1,1,1],[2,1,2,1,1],[2,1,1,2,1],[2,1,1,1,2],[1,2,2,1,1],[1,2,1,2,1],[1,2,1,1,2],[1,1,2,2,1],[1,1,2,1,2],[1,1,1,2,2],[2,2,2,1,1],[2,2,1,2,1],[2,2,1,1,2],[2,1,2,1,2],[2,1,1,2,2],[1,2,2,2,1],[1,2,1,2,2],[1,2,2,1,2],[1,2,2,2,1],[1,1,2,2,2],[1,2,2,2,2],[2,1,2,2,2],[2,2,1,2,2],[2,2,2,1,2],[2,2,2,2,1]]) -vlp.a=append(1,zeros((30, 1))) -vlp.P=eye((5,5)); +vlp.B = matrix([[1, 1, 1, 1, 1], [2, 1, 1, 1, 1], [1, 2, 1, 1, 1], [1, 1, 2, 1, 1], [1, 1, 1, 2, 1], [1, 1, 1, 1, 2], [2, 2, 1, 1, 1], [2, 1, 2, 1, 1], [2, 1, 1, 2, 1], [2, 1, 1, 1, 2], [1, 2, 2, 1, 1], [1, 2, 1, 2, 1], [1, 2, 1, 1, 2], [1, 1, 2, 2, 1], [1, 1, 2, 1, 2], [ + 1, 1, 1, 2, 2], [2, 2, 2, 1, 1], [2, 2, 1, 2, 1], [2, 2, 1, 1, 2], [2, 1, 2, 1, 2], [2, 1, 1, 2, 2], [1, 2, 2, 2, 1], [1, 2, 1, 2, 2], [1, 2, 2, 1, 2], [1, 2, 2, 2, 1], [1, 1, 2, 2, 2], [1, 2, 2, 2, 2], [2, 1, 2, 2, 2], [2, 2, 1, 2, 2], [2, 2, 2, 1, 2], [2, 2, 2, 2, 1]]) +vlp.a = append(1, zeros((30, 1))) +vlp.P = eye((5, 5)) -vlp.to_file('ex11.vlp'); \ No newline at end of file +vlp.to_file('ex11.vlp') diff --git a/setup.py b/setup.py index faa535f..84251ce 100644 --- a/setup.py +++ b/setup.py @@ -2,20 +2,19 @@ from distutils.core import setup, Extension from Cython.Build import cythonize import numpy -ext = Extension("benpy",sources=["benpy.pyx", - "bensolve-mod/bslv_main.c", - "bensolve-mod/bslv_vlp.c", - "bensolve-mod/bslv_algs.c", - "bensolve-mod/bslv_lists.c", - "bensolve-mod/bslv_poly.c", - "bensolve-mod/bslv_lp.c" - ], - libraries=['glpk','m'], - extra_compile_args=['-std=c99','-O3'] - ) +ext = Extension("benpy", sources=["benpy.pyx", + "bensolve-mod/bslv_main.c", + "bensolve-mod/bslv_vlp.c", + "bensolve-mod/bslv_algs.c", + "bensolve-mod/bslv_lists.c", + "bensolve-mod/bslv_poly.c", + "bensolve-mod/bslv_lp.c" + ], + libraries=['glpk', 'm'], + extra_compile_args=['-std=c99', '-O3'] + ) setup( - name="benpy", - ext_modules = cythonize([ext]), - include_dirs=[numpy.get_include()] + name="benpy", + ext_modules=cythonize([ext]), + include_dirs=[numpy.get_include()] ) - diff --git a/test_benpy.py b/test_benpy.py index c56f5ee..e6c3bad 100644 --- a/test_benpy.py +++ b/test_benpy.py @@ -2,7 +2,7 @@ import benpy problem = benpy.vlpProblem() problem.filename = "ex01.vlp" -problem.options={'message_level':3} +problem.options = {'message_level': 3} sol = benpy.solve(problem) problem2 = benpy.vlpProblem() diff --git a/test_benpy_simple.py b/test_benpy_simple.py index 0a69066..3244ba0 100644 --- a/test_benpy_simple.py +++ b/test_benpy_simple.py @@ -1,3 +1,4 @@ import benpy -problem = benpy.vlpProblem(filename = "ex01.vlp", options = {'message_level':3, 'solution':True, 'logfile':False}) +problem = benpy.vlpProblem(filename="ex01.vlp", options={ + 'message_level': 3, 'solution': True, 'logfile': False}) sol = benpy.solve(problem) -- GitLab From e974fc51259bd79c8159a4eabd34b39bb8c9102a Mon Sep 17 00:00:00 2001 From: vintache-d <damien.vintache@univ-nantes.fr> Date: Tue, 14 Nov 2017 09:13:18 +0100 Subject: [PATCH 2/2] unused import --- TestVLP.py | 2 +- TestVLP2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TestVLP.py b/TestVLP.py index 05416db..e82d17c 100644 --- a/TestVLP.py +++ b/TestVLP.py @@ -17,7 +17,7 @@ Created on Wed May 31 15:45:22 2017 # x2 >= 0 import numpy as np -from benpy import solve as bensolve, vlpProblem, vlpSolution +from benpy import solve as bensolve, vlpProblem # %% vlp = vlpProblem() diff --git a/TestVLP2.py b/TestVLP2.py index 95e2202..a634788 100644 --- a/TestVLP2.py +++ b/TestVLP2.py @@ -6,7 +6,7 @@ Test VLP interfase with bensolve @author: mbudinich """ # %% -from numpy import transpose, ones, zeros, eye, matrix, loadtxt, append, hstack, vstack, inf +from numpy import transpose, ones, zeros, eye, matrix, loadtxt, append, vstack, inf from HelperClass import VlpProblem # %% # Example: MOLP with 2 objectives, simplest example -- GitLab