From 101af0ebc62cd89f5378b29559b336013c147e2e Mon Sep 17 00:00:00 2001 From: Kilian Scheidecker <kilian.scheidecker@orange.fr> Date: Wed, 22 May 2024 15:01:46 +0200 Subject: [PATCH] included fastapi --- backend/app/__init__.py | 0 .../app/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 199 bytes backend/app/__pycache__/main.cpython-310.pyc | Bin 0 -> 986 bytes backend/app/dependencies.py | 1 + backend/{src => app}/main.py | 18 +++++++++++++----- backend/app/src/__init__.py | 0 .../src/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 203 bytes .../src/__pycache__/optimizer.cpython-310.pyc | Bin 6065 -> 6114 bytes backend/{ => app}/src/main_example.py | 0 backend/{ => app}/src/optimizer.py | 10 +++++----- 10 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 backend/app/__init__.py create mode 100644 backend/app/__pycache__/__init__.cpython-310.pyc create mode 100644 backend/app/__pycache__/main.cpython-310.pyc create mode 100644 backend/app/dependencies.py rename backend/{src => app}/main.py (59%) create mode 100644 backend/app/src/__init__.py create mode 100644 backend/app/src/__pycache__/__init__.cpython-310.pyc rename backend/{ => app}/src/__pycache__/optimizer.cpython-310.pyc (51%) rename backend/{ => app}/src/main_example.py (100%) rename backend/{ => app}/src/optimizer.py (98%) diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/__pycache__/__init__.cpython-310.pyc b/backend/app/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..678d7d066fb628b94456ab8b9b89e3cd338ff648 GIT binary patch literal 199 zcmd1j<>g`kg7aH^(?IlN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_kvsFxJacWU< zOm=2YW@3y>esXDUYF<fkOn|e3x2KP%qo0DVLUCnYa*S_cL9s%9o<ea+YEgb>N^wkD zVsVLXUTR5seo?k=USe5hdSXdteqKycVsdtBUP?@2K|xG>d}dx|NqoFsLFFwDo80`A Q(wtN~kQ<7bfCLKz08t+`9{>OV literal 0 HcmV?d00001 diff --git a/backend/app/__pycache__/main.cpython-310.pyc b/backend/app/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21f3cee4583cade7331b40935c4fb79e719f22cd GIT binary patch literal 986 zcmZ8f%}(1u5Z<*niSt(=;?SdybyeVws;Y>p5^6z6s29tUwRqR*Dz?|!-J~TXr}Qa$ zf+NqtTlm^j)HmQlXRQ!O$J){CH{<>0PxkvA1oH6rG<{1D`eQFIr2&_ZaC8KUA%-)Q z;}BzOJ77DZQ`>Il<|HH-ak4;RgEwxPjND?@;4RkVUP@StdB4a4hi%?r?UAG2@%942 zznzQv1l=Vtpa53`Ewc%aWobk%rql>o0P1D5U^!JIuv?$0Hb>_t(>DjJD1LCA)1R?6 zywvl9>r#or#74%6EZ{Xhui9&Owf(<0aV+ynpb4l6=NOLu4Qhzy&dj+%1~beY<}Tb@ zD1U_z)?m#Iqy>n#fwTeXY#?1gdK*X|kXIYX)-#s@{u!F#g*$iI_6)I|nVXUe6b#PB zEy$4F-<4FE<s(SoC=5`ord=b)%I6|YdA3XdUU`?c;OQ1siO;xil#qG(oj*Bk2f}71 z#}l>2Y)8UQE(-%AFweMMp3s9XCsMI>v<K+eDyo#2+~4tO7uxUF)A0{0+zH&ONz0NK zOt}!IY(4=|cG*--)qa|`4qr`#7Dg1q*ixuFq_!dKAw52fzG<#>G!mJh(I=UVb6yx7 zoge#OPQIQTo%wsdzABRFl$P3;h2>XLFde0^K6?c>KcpJ%6?7to^_E4KG#Noo5u_I7 zR22K=RYj~}Ytg%)h&RA5zn<G8Y5<PPi(?xZ$7ew|>}!?mKdq*!%c~0wTb7!ZLfIx) zE)Z4jkekYdeXYo)l-c^Vg62Gq>tbK1oto=?F4;KaAMB{LrSG90?%}56xx3hV-NEGX EA3sR{+W-In literal 0 HcmV?d00001 diff --git a/backend/app/dependencies.py b/backend/app/dependencies.py new file mode 100644 index 0000000..2cb6801 --- /dev/null +++ b/backend/app/dependencies.py @@ -0,0 +1 @@ +import app.src \ No newline at end of file diff --git a/backend/src/main.py b/backend/app/main.py similarity index 59% rename from backend/src/main.py rename to backend/app/main.py index 772daca..84b3141 100644 --- a/backend/src/main.py +++ b/backend/app/main.py @@ -1,10 +1,15 @@ -from optimizer import solve_optimization -from optimizer import landmark +from src.optimizer import solve_optimization +from src.optimizer import landmark +from fastapi import FastAPI -def main(): +app = FastAPI() + + +@app.get("/optimize/{max_steps}/{print_to_console}") +def main(max_steps: int, print_to_console: bool): # CONSTRAINT TO RESPECT MAX NUMBER OF STEPS - max_steps = 16 + #max_steps = 16 # Initialize all landmarks (+ start and goal). Order matters here @@ -18,8 +23,11 @@ def main(): landmarks.append(landmark("arrivée", -1, (0, 0))) - visiting_order = solve_optimization(landmarks, max_steps, True) + visiting_order = solve_optimization(landmarks, max_steps, print_to_console) + #return visiting_order + + return("max steps :", max_steps, "\n", visiting_order) if __name__ == "__main__": diff --git a/backend/app/src/__init__.py b/backend/app/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/src/__pycache__/__init__.cpython-310.pyc b/backend/app/src/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c06a0824710e098468b6c39d10d3d27ee83ac35 GIT binary patch literal 203 zcmYk0u?oU47=%;lAVS|Et3!PN5m9t0+9HVC4<)9lgtmW5{#5BBx%)J(j=q7D>7)nu z9e2~2D4H;@_aiNbd=2<l;LFOJLXUzS*)+)R%ntJpACz-Ak+KApuC;)zkzJ$E5gayr zm+X^u#$!%BN=QXZ+#n~XtkDHQDaggB+|Af3Msd{_;j}?G3t1^FK(sB8m5}EewafEa T+ds#P#uQzxmctJkd4%i>W2QF) literal 0 HcmV?d00001 diff --git a/backend/src/__pycache__/optimizer.cpython-310.pyc b/backend/app/src/__pycache__/optimizer.cpython-310.pyc similarity index 51% rename from backend/src/__pycache__/optimizer.cpython-310.pyc rename to backend/app/src/__pycache__/optimizer.cpython-310.pyc index 2446c047e04e4aa4cec9c2a5628a2c89ec72a9c7..55a6337409776ed6c3207b9db525d84153adfb21 100644 GIT binary patch delta 1087 zcmZ9K-%Aux6vy{mXJ*G8cN}MJS8XM2(-@;n!^}iO%luJ+7FkS%Zo8Wrvb)_G!(gRA zj9%+NP!UwnQ%~Yk)Qj}gLqQKcG}KEk734#IK+rwcU(mvQ_TF>P`QGn2Gs~^tTg^f= z8VQNt((g0ZYMf<r4Orng{sp%zT`aDQGnavh%gW$hT_maEIW8XWfq)+>g|5RQER^}I zR3`qFsnCLoJJs5By{~3P1VVX5tQ1<6loO#Vu?0=+)e@An+R$|^5t1kBv+!o*xyZbc z^7RtiR9|EZVNs*`<)!c<Y*yfs`VJyEtfgvsz3>tk#k4;?F`LUz`P1AI5l6>6+K%!- z^QUL>Q(k}%wWg*P@?Iwp0UZ=ztVS0rrZXFCu$To3;~gtswT}QN@s-{UNAQRK3l8I_ z@*(KNx=0EN*c)krUd%?GI$c6ZUhkB1lIBMV-2#D@nc<n)9N$He9&9o8!(F^+)I%TM zG@jH^rK9~{1k=0|_f<5(V;rl9!2sqeUK{<SkRWuS6K&Kw*A+*jd*CI`MN=?>kD}T5 zDGHw!2-tjEz;3m<Y`#6fnAu$QMnpYLKo?!t03XE>^9A(dnwd0us7y)@V|C>oSjDc& zMi|3OmG93Vrn5MKM$Acpj}pQHj<N3ktXKz-37}8PxT;qy_-$?^JLCBie)_7I!LUeK zkGJ!qc*|;r&-lzr8RMiiNEllAXqhzgZ&kbd<+buM+4|Ov8$+Oc^0R4RU4Wtu0s#z( z8TQ#bG}+lOUbgqaPrPRz0vF%f8BkUlVyj?ny{QcY_@{dHwlp+AQoV#Rf=d`7$Vo6- z9U<%|^a;3OZ!VL`c^)U{L1a8VJC_^ayukSZ%IP3D0*<vkGS@2dnY=GP&52AQ?-j(D z&dJxXZLE#zw!6C^wyr)uakVg)&wBhIogO1};$-|F=y*RqP^R)p{1PAOmv>5=vJ<k& zWn;1vo3?VUvc)Re%HCzOt+buQ4=jPDM6xz)Ce5Vo=n1{rH0-#p+12rwovcv)0rJ7* A^Z)<= delta 1147 zcmZ9LO=uNY6oBX4`FZpHCgV$d6Jx~aGr>_bCNchy1Y={G_*ZPJq7x)M-y4%?e2I4^ zC4m=fNri4&C}&k9+DbPrT!hd?+fB7AH$uVHEQM0K=(<p-c+P!lz=8YCIp>~x{^rih z?zL`bE}ze6^nCT`?6v2+*PMSq+^FFH5Ufv#%L1D4Cu3|VMGhvd5n9o0Laf!b>#zdL zdMxTXy^XY1*T2_)(5m2RRne@)2HS54xfO>@?`U?}jLoW9hq}2%yKZ^f3V?QNN1UpQ zx3N~lvPC{tY}c(7iozas16R%8A&q6Lv?s~Vm*eTl*|0VhPfM4|@KcE{!$|HSIe~Kt zT#`FU4DeU0bH`qiq9P#!HVDyb(_7f01zh2RA!OgWnR*T|iZAQ|ID~HcZ#anmrN^Nk zM=~X-;Z&v*2J!36s(+ZG$ZZ5at#ZjDY&c3ttjdh6%!YD1TL$pc>^``QUu3tzF?^7{ z*TyG(>-|G8E&K6&u5<Huv>oyM4d~)3p~H|P_)YHT-eEFIkFk+F)o9c>J{jIhjH|>( z+J1H$z@_{y_z~~tOE8X4^VQ->HlHE{VzDO>OSBey0~~a^HvK}@$RgO3wH4%PjGTwN zhsmIF24-2x@{(^h3h!Y107GRO!=a{KrQb-8S_w8dkkfM%$OUmnyvpgW5F)3`Gx%lG zvz~)|jz5DMpyZ_TG=nddpKW9~OL7901dh{SZo6K7j0}Mp&CkWX@(4b3yWj;rb4%He z`Q#|$!}Wh%2jB!+g`HPa5*2!w_uj>Se}Zq)H3G0_2O)uR)mV@YXTzJ5^D_J_F<5N$ zJcf4*d*Lr!EA+ty{IgI2ef?zf6L8;Mf;R<W+vX>qs{;8yk%Npgj0=o$hMI$5=@4Td z;}{`GMGKWm7)6phNirA9vkT#<lyg$<XP-WXPw?H1fd%%woT<e#wJG@#?{huf>Q>4g z);GHRgw()ZoV+@>P^(7r0PhYl`tjT10Z8G~;;3%P3Cwt>K2W(-d8z|0PpXDg2L)Eu ud{t|kSXDi%Cc9akz(0hCkG=LSw$tvk*}m=BEl##jw5>u*vANKmGhPD<Q0Jxq diff --git a/backend/src/main_example.py b/backend/app/src/main_example.py similarity index 100% rename from backend/src/main_example.py rename to backend/app/src/main_example.py diff --git a/backend/src/optimizer.py b/backend/app/src/optimizer.py similarity index 98% rename from backend/src/optimizer.py rename to backend/app/src/optimizer.py index 66efaeb..4c1b631 100644 --- a/backend/src/optimizer.py +++ b/backend/app/src/optimizer.py @@ -10,7 +10,6 @@ class landmark : self.attractiveness = attractiveness self.loc = loc - # Convert the solution of the optimization into the list of edges to follow. Order is taken into account def untangle(resx: list) : N = len(resx) # length of res @@ -43,6 +42,7 @@ def untangle(resx: list) : def print_res(res, landmarks: list, P) : X = abs(res.x) order = untangle(X) + things = [] """N = int(np.sqrt(len(X))) for i in range(N): @@ -59,11 +59,12 @@ def print_res(res, landmarks: list, P) : for idx in order : print('- ' + landmarks[idx].name) + things.append(landmarks[idx].name) steps = path_length(P, abs(res.x)) print("\nSteps walked : " + str(steps)) - return order + return things # Checks for cases of circular symmetry in the result def has_circle(resx: list) : @@ -260,7 +261,7 @@ def path_length(P: list, resx: list) : return np.dot(P, resx) # Main optimization pipeline -def solve_optimization (landmarks, max_steps, printing) : +def solve_optimization (landmarks, max_steps, printing_console) : # SET CONSTRAINTS FOR INEQUALITY c, A_ub, b_ub = init_ub_dist(landmarks, max_steps) # Add the distances from each landmark to the other @@ -307,12 +308,11 @@ def solve_optimization (landmarks, max_steps, printing) : raise ValueError("No solution could be found, even when increasing max_steps using the heuristic") - if printing is True : + if printing_console is True : if i != 0 : print(f"Neded to recompute paths {i} times because of unconnected loops...") X = print_res(res, landmarks, P) return X - else : return untangle(res.x)