From 81be7dad34367d86df5bf2d2b480e3c3bc124cdc Mon Sep 17 00:00:00 2001 From: aristidecod <sie.ouattara@etu.univ-amu.fr> Date: Tue, 21 Jan 2025 22:17:19 +0100 Subject: [PATCH 1/3] try to implement solutionFractionnelle --- .idea/misc.xml | 2 +- out/production/aroTP2/App.class | Bin 682 -> 728 bytes out/production/aroTP2/InstanceReader.class | Bin 2335 -> 2335 bytes out/production/aroTP2/Loot.class | Bin 881 -> 1009 bytes src/App.java | 3 ++- src/Backpack.java | 30 +++++++++++++++++++++ src/InstanceReader.java | 1 - src/Loot.java | 16 ++++++++++- 8 files changed, 48 insertions(+), 4 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a346fd7..1b2d693 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="18" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="22" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/out/production/aroTP2/App.class b/out/production/aroTP2/App.class index f3dffbcc762d201aabffbb6ae573bd035da8db2d..f385ca79a766fbfe129b15dfa2d50392d0a867a1 100644 GIT binary patch delta 295 zcmZ3*dV`hg)W2Q(7#J9w7>p-!br^Fo2r>w<GYIoAh%m4*GH^I0CTABUCTBA;a2Mwn zl{i%fC6;97b25lAh_f?D@GwX+NKKq?%q_zp%g!Lj!ywO~F!8Pxqtavv#^sC#lMgT& z)+;hFF@OLQ10w?~0~-S)gE9jHgFXWz10w?i1FP0{2F8sH3=B*RDhv!@X$A&n22}<I z1|En41~mqC1_lOB1`P&H1}3oPNCqabp_029*dw<ya0+p4W8m@8-o_xXi9u9*8-p~$ zKp`gv7LYXzybNp%f(+~o5)2$*)5RbrFlaGoGcYjlGVn0yFz7NcGUzcdFt9K%f*oiG Hc9#(VumdBR delta 250 zcmcb?x{8(S)W2Q(7#JAr81yD`b?|aB2r>w<GYIoAh%kswJZj7>&LF|gAj!iZ#UMSI znbC?-cCsDgaz^dR&lnBsWf+(kK!AyXk%5(gje(Itj)8$epMjBqk%57MRcku~<3<Js z1||l11_rP+0|PUI0s{jB4@3cjB7+hG0|O_6GJ^^O6IgQ~0~6R#(cKK}k=q$Kg}Amc z@c3+E5YXPnAcioEkAazi!HR*EftP`eL4<)FY^oSUCxa@38Uq6ZF9QdII)erSBZDRb S0|N^KBZC$LBZCguJ-Pt$h8Z0I diff --git a/out/production/aroTP2/InstanceReader.class b/out/production/aroTP2/InstanceReader.class index bcce837946a70025a3a851972fc22b8e964e1cc4..9a1d5b11a0914dac9a5b1a1a0bdda4d0958bdced 100644 GIT binary patch delta 115 zcmbO)G+&70)W2Q(7#J9wHgZ(3+6pifFfxd0_+%xPCF<uS=B4ZVCuOB3mso3t@v|`$ zaWVKZ6!S2oGh_%baPzY<lyNbXGgPoMRPr!XF;s7!$jZdHc|V&wlVm9aGebT@Awvm6 T4FdxM7Xu?hEkiv+BZDLW)BzfJ delta 116 zcmbO)G+&70)W2Q(7#JArHgZ(33i7it6mT&VG8C~h6!S2YFqCfI%gV&4BfwD3$RMiW zla*MOsGpOVm#*)hl$DxXVyzj*&&E*6#o)_O#lw)!kRiapy?H;IJCkHS12aPzLj^-M ULk$B10~Z4$LoGu+LnDJE0Krijpa1{> diff --git a/out/production/aroTP2/Loot.class b/out/production/aroTP2/Loot.class index 677c206f5b43a39187728543b3333c45abeee666..07f1b7ef8b118f561e0965b6f117e4420a682f7c 100644 GIT binary patch delta 497 zcmey!_K}_I)W2Q(7#J9w7>p-!B{_03a4-n+FbFXSGcvFiC6;97Gcqu`2{AA*i1ILq zF^DrVi039|r#k27B`21IXO?6*=jRodB<7VAGct&4czU``oL0-vk)B!-1kuZ^q3JeR zkWoj5gF%gvft68#QGt=4jX{HpL6bp?ok1I9sLo_R#zR7k3_PBBd8tLtIf=!^sm1IJ z`jfSpv{(!o8RRDGG09CXXA-JsW?*38X5e7}0e&bg#30PTz`)GF$iT`V!NABM$-uyn z#=y(~QY)dgoq<tHdMg9FmdsWLUM=Z1nYO&G3<4V&7#Nrsq!<_o^7#LU?SQywC zI2qU(_!u}C#2Gjlq!}0(6d-0W$S}x)EM$<V2V2g_z`!8E0J5HmfssLuK^|(U4cHM3 z3_@C47}&M8Fz{+^VG!8GAi}_~0d5@|14uUy*mxc=TL@}ABZC5iBGe>(21c+PE69X( z2+a;)Q2`{~tWe#|3`$^S$_y$D3=A9$j11}wj0~y_x(o~qTnvm1dJF~(MhubwW92%g delta 343 zcmey!{*jIA)W2Q(7#JAr7<4CcC2<KcFfa)6FbFXSPwbIl5!3MWoVd1jvNfZYAU_*} z0vCfKgAzM~GDv~S<VMCravTh5j10_-3XF^lJf3-ZsYT8?iN(dK#q124j0~!i*D|Uy zvomN<ZeTL5XJTMr;AY@q00Dk5&BVaSz{()Pz{nuVz`zj6z{J4Jz`($-wVi=cOL{8< zyOzvW2HuSf3=B*RVhjunLJTYn3=Av`EDWp+oD6IXd<^Ui;tUK73J`4!5)6_cvl;lo z)-ZyMVgOkLvPOy_QyOZI1p`Qcfq_qJ3j@2>76#s33<3-c8{pQkF@UskfsN(?v-zM# pGc(A5Rmn2QF)%Q2FfcO6GcYo!GN>~!FmN$2GH5VpG3YQz0swR1BYFS; diff --git a/src/App.java b/src/App.java index 919c748..7aa8157 100644 --- a/src/App.java +++ b/src/App.java @@ -3,6 +3,7 @@ import java.util.List; public class App { public static void main(String[] args) throws Exception { Backpack backpack= new InstanceReader().read("src/sac0"); - System.out.println(backpack); + backpack.sortByRatio(); + System.out.println(backpack); } } diff --git a/src/Backpack.java b/src/Backpack.java index 121d485..10ba315 100644 --- a/src/Backpack.java +++ b/src/Backpack.java @@ -1,8 +1,11 @@ +import java.util.Comparator; import java.util.List; public class Backpack { int capacity; List<Loot> loots; + int sfValuee = 0; + int sfWeight = 0; public Backpack(int capacity, List<Loot> loots) { this.capacity = capacity; @@ -12,4 +15,31 @@ public class Backpack { public String toString(){ return capacity +"\n"+loots; } + + /** + Méthode pour trier les objets par ordre décroissant selon leur ratio + */ + public void sortByRatio(){ + loots.sort(Comparator.comparing(Loot::getRatio).reversed()); + } + + public void solutionFractionnelle(){ + this.sortByRatio(); + + for(Loot loot : loots){ + if(loot.getWeight() > this.capacity){ + sfValuee += (loot.getValue() * loot.getWeight()) / (capacity - sfWeight); + sfWeight += capacity; + } + else { + sfValuee += loot.getWeight(); + sfWeight += loot.getWeight(); + } + } + } + + public int getSfValuee() { + return sfValuee; + } + } diff --git a/src/InstanceReader.java b/src/InstanceReader.java index 58e01ae..1724721 100644 --- a/src/InstanceReader.java +++ b/src/InstanceReader.java @@ -23,5 +23,4 @@ public class InstanceReader { return new Backpack(capacity,loots); } - } diff --git a/src/Loot.java b/src/Loot.java index 46c20c0..e2a85e0 100644 --- a/src/Loot.java +++ b/src/Loot.java @@ -1,12 +1,26 @@ public class Loot { int weight, value; + float ratio; public Loot(int weight, int value) { this.weight = weight; this.value = value; + this.ratio = (float) weight/value; } public String toString(){ - return weight+" "+value; + return weight+" "+value+" "+ratio; + } + + public float getRatio(){ + return ratio; + } + + public int getWeight(){ + return weight; + } + + public int getValue(){ + return value; } } -- GitLab From 8d48fa47b4ac453e0813d3af904f79ee902a03e0 Mon Sep 17 00:00:00 2001 From: aristidecod <sie.ouattara@etu.univ-amu.fr> Date: Tue, 21 Jan 2025 22:31:40 +0100 Subject: [PATCH 2/3] test de la fonction solutionFractionnelle avec un exemple --- out/production/aroTP2/App.class | Bin 728 -> 1265 bytes out/production/aroTP2/Loot.class | Bin 1009 -> 1160 bytes src/App.java | 5 +++-- src/Backpack.java | 2 +- src/sacTest | 4 ++++ 5 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 src/sacTest diff --git a/out/production/aroTP2/App.class b/out/production/aroTP2/App.class index f385ca79a766fbfe129b15dfa2d50392d0a867a1..8d3c8e862e7d1d8ac1daac52964bbb7ec3329713 100644 GIT binary patch delta 851 zcmcb?`jM0C)W2Q(7#J9w7<?yk`SNfV7bWW#Cnkra7MDy+h|uR^5M&VJVGw6vV`LC5 z&d(_=$;{7lD@sfT(RrykIjNisk_=Mp4AMLdG7Pd4j~dqtGRX5VC@?58GH|D-mISAT zCFYc-rZO@xYiN23F)%PF^Dw9|s4_B$=O$*SI_KvlCzga~mSi~R=M|SE=9LsPGKgw; zYWid)mL=-vB<7{-2bUCO=A~P6F{m?Wurp}#FlaGoGcpK+6=de?2NY%Il?0a*r6%Sw zGO!m+mSq&>fojnVV`tEvY{$5q(R%VTM!kAQ1_7u1{F365qQnB<)RK(+lwuAB2Sx@- zn9mf_kiDj0#mLXb;Kaq?%;3V#;0kiL8zX}X*kZ8DGV{vvvs0lCgm}d*F}WnasFIOk zh6a)sAPVdCA(nb1=B4DM7OVK==VzA|SR<)}x*JIZq7$kyq_Q9ti}GkB_5Mj&smUeQ z$l(Vy!a1=%Cnq?wB-NUcfyXm1FSW=yC$YFVwV0j3laWCc!&lhc%Ff`;$RLMbDI)_L z#A6JK3_1)<3?RV7z{tSLP|wD|$e_o-z@X2-$iT?Jz`&}toq=&90|NsSgFXWT14x>I zftkU8fq{VsqJY7W!H9u@fs?_Q!GwVctT~f`32dtBZU*+q?F^hkT-z9Ue6+VQ2xxC( z5Z%Nep}mbkZWn_R1H(23HH6_}46I2YD;anh*cb#E*cn6_I2cqIIKj4wK}=*YWiVr4 zVBlqtU@&K}U|?jhWME)mVPIsiVqj*l0lU+d!H$7}frEjO!I6QH!JfgLfq{XGfsw(3 K!HdC%K@tF+ZO<P7 delta 285 zcmey!d4rYf)W2Q(7#J9w7>p-!`Eqg;7bWW#Cng(AOpf5?WDsKzXJ?S$VUT2yn)u3? zTZTcFok5O=L7qWjaucIIkAG5DYI2FSW*9qz(&W92%NY$Or!wi)Gbl1BGB7cK022cv z11kd?10#bn0|SFT10w??0|NuA)^-NQjSLJ7ObjXv3}9&n24)6T1_lNmhyn&R26YAo z22KVI22BPgu;xexCa|HByBXLcw=-}GacyJZ@zLJKAh3x+RC^nPG|WI(1_mJp7LYXz zybNp%f(+~o5)2$*)5RbrFlaGoGcYjlGVn0yFz7NcGUzcdFt9K%f*oiGc9#(V`-LMR diff --git a/out/production/aroTP2/Loot.class b/out/production/aroTP2/Loot.class index 07f1b7ef8b118f561e0965b6f117e4420a682f7c..4ffba3f58d9594f16f64fe6527d3748ef90eb0fc 100644 GIT binary patch delta 268 zcmey!-oeRr>ff$?3=9lT3}zd-3>l?4(^E^rQ!~>uN*EcKH8edL8935YOTrR!N>e9W zGU`cbGBU6-DljTA^0P5$b1~>J=(02D@i2%n=ud8Byv$<6$e=oTEu$(kJA=vO1}0xd z*2(9X{?s!vC^0BAFfvFoFfiydFfuSQFfg!cZDC+v!@$76#304Mz`zC;6k(8NU|`?@ zvsoEr7-Sh37#JB;uxjQ-*DQfWGc$uK1A`I+6N4IqIs*d(2LmI676T)L27>_u0|OTW NBZDD>F@q_CBmk%5AUyy8 delta 124 zcmeC+{K(FA>ff$?3=9lT48|L|3>ha!FzQIDF*2|+DljTA^0P5$a4~2yXt6VB^Du}p z=uDo+c$r0?kwJCx0wy^w6`%b4?9u{u2E)m7nS2?UC%<O;qt48r#K6G7#GuTe!oa}5 d!NAC%&cMi^%Am`@z`(`8$e_nyz+l862>?uh6-@vD diff --git a/src/App.java b/src/App.java index 7aa8157..a70ffd2 100644 --- a/src/App.java +++ b/src/App.java @@ -2,8 +2,9 @@ import java.util.List; public class App { public static void main(String[] args) throws Exception { - Backpack backpack= new InstanceReader().read("src/sac0"); + Backpack backpack= new InstanceReader().read("src/sacTest"); backpack.sortByRatio(); - System.out.println(backpack); + backpack.solutionFractionnelle(); + System.out.println("solution fractionnelle :" + backpack.getSfValuee()); } } diff --git a/src/Backpack.java b/src/Backpack.java index 10ba315..b8552f0 100644 --- a/src/Backpack.java +++ b/src/Backpack.java @@ -29,7 +29,7 @@ public class Backpack { for(Loot loot : loots){ if(loot.getWeight() > this.capacity){ sfValuee += (loot.getValue() * loot.getWeight()) / (capacity - sfWeight); - sfWeight += capacity; + sfWeight += capacity - sfWeight; } else { sfValuee += loot.getWeight(); diff --git a/src/sacTest b/src/sacTest new file mode 100644 index 0000000..25c99fb --- /dev/null +++ b/src/sacTest @@ -0,0 +1,4 @@ +15 +5 40 +8 48 +4 36 \ No newline at end of file -- GitLab From 89fb0e0a9fc3be65ef4236a0bb2cbafa0c048fb2 Mon Sep 17 00:00:00 2001 From: Boubacar <gounouseroboubacar@gmail.com> Date: Tue, 21 Jan 2025 23:10:11 +0100 Subject: [PATCH 3/3] solutionFractionnelle --- .idea/misc.xml | 2 +- out/production/aroTP2/App.class | Bin 1265 -> 1265 bytes out/production/aroTP2/InstanceReader.class | Bin 2335 -> 2335 bytes out/production/aroTP2/Loot.class | Bin 1160 -> 1160 bytes src/Backpack.java | 13 ++++++++----- src/Loot.java | 2 +- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 1b2d693..38eefb8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="22" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_23" default="true" project-jdk-name="18" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/out/production/aroTP2/App.class b/out/production/aroTP2/App.class index 8d3c8e862e7d1d8ac1daac52964bbb7ec3329713..4ae707af27c19bbfc1bf784eb39242b2b1eb1ffe 100644 GIT binary patch delta 17 Zcmey!`H_?3)W2Q(7#J9wH*&mW0RTt*2POaj delta 17 Zcmey!`H_?3)W2Q(7#J9wHgddV0RTt$2PFUi diff --git a/out/production/aroTP2/InstanceReader.class b/out/production/aroTP2/InstanceReader.class index 9a1d5b11a0914dac9a5b1a1a0bdda4d0958bdced..5e8faaeb63c791acfcbc457ec4e45f20eb8b6eee 100644 GIT binary patch delta 17 ZcmbO)G+&70)W2Q(7#J9wH*$z`0suWL1;+pY delta 17 ZcmbO)G+&70)W2Q(7#J9wHgbq_0suWG1;zjX diff --git a/out/production/aroTP2/Loot.class b/out/production/aroTP2/Loot.class index 4ffba3f58d9594f16f64fe6527d3748ef90eb0fc..dcc24c07e6b496357fea863d1d9cdfe408d4b69a 100644 GIT binary patch delta 26 hcmeC+?BL`$^>5cc1_lP_jT{`z%rb4#n}wN683A-52XO!Z delta 26 hcmeC+?BL`$^>5cc1_lPFjT{`z%+hT#n}wN683A+=2XFuY diff --git a/src/Backpack.java b/src/Backpack.java index b8552f0..c1b8321 100644 --- a/src/Backpack.java +++ b/src/Backpack.java @@ -27,13 +27,16 @@ public class Backpack { this.sortByRatio(); for(Loot loot : loots){ - if(loot.getWeight() > this.capacity){ - sfValuee += (loot.getValue() * loot.getWeight()) / (capacity - sfWeight); - sfWeight += capacity - sfWeight; + if(sfWeight + loot.getWeight() <= this.capacity){ + // Si l'objet entier peut entrer dans le sac + sfValuee += loot.getValue(); + sfWeight += loot.getWeight(); } else { - sfValuee += loot.getWeight(); - sfWeight += loot.getWeight(); + // Si l'objet ne peut pas entrer entièrement dans le sac + int remainingWeight = this.capacity - sfWeight; + sfValuee += (int) (loot.getRatio() * remainingWeight); + break; } } } diff --git a/src/Loot.java b/src/Loot.java index e2a85e0..d7dc032 100644 --- a/src/Loot.java +++ b/src/Loot.java @@ -5,7 +5,7 @@ public class Loot { public Loot(int weight, int value) { this.weight = weight; this.value = value; - this.ratio = (float) weight/value; + this.ratio = (float) value/weight; } public String toString(){ -- GitLab