[ca] L'objectiu d'aquest projecte és desenvolupar un algorisme versàtil que resolgui problemes d'optimització combinatòria (tot i estar especialitzat en Selecció de Variables) i implementar-lo en el llenguatge Julia. El camp de l'optimització combinatòria és molt ampli i, per norma general, els algorismes dissenyats per resoldre problemes d'aquest tipus acostumen a estar pensats per a problemes molt concrets o requereixen que l'usuari introdueixi molts valors que, de vegades, poden semblar arbitraris. En aquest cas, l'algorisme no busca ser el més ràpid ni el que generi les millors solucions en quant a qualitat, sinó que busca poder resoldre la major quantitat possible de problemes d'optimització combinatòria en un temps d'execució raonable, tot mantenint un mínim de qualitat en les solucions i donant eines per facilitar el treball de qui l'utilitzi. L'algorisme ha estat implementat i testat utilitzant diversos criteris (Minimum Redundancy Maximum Relevancy, Trace Ratio, Linear Discriminant Analysis, Logistic Regression and Random Forest) amb diferents conjunts de variables sintètics, generats amb un generador de variables per poder mesurar alguns paràmetres per tal d'assegurar-se que funciona com s'espera. Els resultats han mostrat que funciona com era d'esperar i que la funció que més afecta al temps d'execució és la funció d'avaluació (en aquest cas, els diferents criteris), essent el pitjor en aquest aspecte el Random Forest i el millor el Trace Ratio. Per conjunts fàcils, les millors solucions les donen mRMR i TraceRatio (i la pitjor la dona el Random Forest), pels de mitjana dificultat, mRMR segueix essent el millor, seguit aquest cop del Random Fotrest (i amb Logistic Regression com a pitjor opció) i, pels conjunts difícils, el millor criteri sembla ser el Random Forest, seguit del mRMR, mentre que el pitjor és, de lluny, el TraceRatio.

[en] The goal of this project is to develop a versatile algorithm which can solve combinatorial optimization problems (even though it is specialized in Feature Selection) and to implement it in the language Julia. The combinatorial optimization field is quite wide and, generally speaking, algorithms designed to solve this type of problems tend to be focused on very concrete problems or require the user to set a lot of values which, sometimes, can seem arbitrary. In this case, the algorithm implemented does not aim to be the fastest nor to give the best solution in terms of quality, but to solve the largest possible amount of combinatorial optimization problems in a reasonable execution time while maintaining an acceptable quality in the solutions given, and giving tools to make it easy for the person working with it to use. The algorithm has been implemented and tested using diverse criteria (Minimum Redundancy Maximum Relevancy, Trace Ratio, Linear Discriminant Analysis, Logistic Regression and Random Forest) with different sets of synthetic features, generated using a feature generator, to be able to measure some parameters to ensure that it works as expected. The results have shown that it works as expected, and that the function that most affects the execution time is the evaluate function (in this case, the different criteria), being the worst one on this regard the Random Forest and being the best the Trace Ratio. For easy sets, the best solutions are given by mRMR and TraceRatio (while the worst one is given by Random Forest), for the medium ones, mRMR still takes the lead, followed this time by RandomForest (and the worst being Logistic Regression) and for hard sets of features, the best criterion seems to be Random Forest, followed by mRMR, while the worst, by far is TraceRatio.