Datensätze mit R auswählen ?

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

grafZahl
Beiträge: 4
Registriert: So Mär 24, 2019 12:32 pm

Datensätze mit R auswählen ?

Beitrag von grafZahl »

Hallo zusammen,

ich bin neu hier und habe mit R noch nie gearbeitet. Bisher konnte ich privat (Wirtschaftlichkeitsberechnungen, Aktien usw.)
und beruflich (Controller) alles mit Excel, Pivot, Access und VBA lösen können.

Aktuell beschäftigt mich ein rein privates Projekt bei dem Solver an die Grenzen kommt.

Und zwar habe ich eine Tabelle mit Datensätzen (ich erkläre mal alles mit Autos) die jeweils Beschreibungen oder Eigenschaften haben (z.B. Hersteller, Aufbau, Sprit) und Werte haben (PS, Kosten, Verbrauch).

Dann möchte ich Vorgaben machen wie:
Ich brauche 18-22 Autos
Die dürfen maximal X kosten
Die sollen so viel PS wie möglich haben
So wenig wie möglich verbrauchen
Vom Hersteller X maximal 4 Modelle
vom Hersteller Y mindestens 2 Modelle
Maximal 10 Diesel

Mit Solver kriege ich das einigermaßen hin, muss jedoch Einschränkungen vornehmen (nicht alle Datensätze, nicht alle Kriterien) und ich bezweifel, dass das Ergebnisse die beste Kombination ist.

Die Frage ist also kann R sowas oder ist R eher dafür da die Datensätze zu analysieren.
Wenn R das kann, könnt ihr mir ein paar Befehle nennen mit denen ich sowas machen könnte?

Danke !!
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Datensätze mit R auswählen ?

Beitrag von Hufeisen »

Klar kann R das und es bringt sogar einen Datensatz mit Autos mit, damit alle über das Gleiche reden können. Ich habe deine Beispiele der Reihenfolge nach abgearbeitet, die letzten beiden aber nicht gemacht (weil sie vorherigen Beispielen gleichen). Ich hoffe es ist übersichtlich. Wenn du R noch nicht installiert hast, kannst du den Code hier laufen lassen: https://rdrr.io/snippets/

Code: Alles auswählen

# mtcars angucken
head(mtcars)

# 18-22 Autos auswählen
nrow(mtcars) # mtcars enthält 32 Autos
mtcars[sample(nrow(mtcars), 18), ] # sample zieht zufällig 18 Zeilen aus dem Datensatz mtcars
mtcars[sample(nrow(mtcars), sample(18:22, 1)), ] # wie zuvor, aber mit einer Zufallszahl von 18 bis 22

names(mtcars) # Preis ist leider kein Bestandteil von mtcars, aber nehmen wir mal PS (hp)
mtcars[mtcars$hp < 100, ] # alle Autos mit weniger als 100 PS (statt Preis)
mtcars[which(mtcars$hp == max(mtcars$hp)), ] # wenn man möglichst viele PS möchte
mtcars[which(mtcars$mpg == max(mtcars$mpg)), ] # wenn man möglichst wenig verbrauchen möchte

companies <- substring(rownames(mtcars), 1, regexpr(" ", rownames(mtcars)) - 1) # Namensvektor aus den Reihennamen erstellen
companies <- as.factor(companies) # ändern des Datentyps
summary(companies) # für das Beispiel kommt nur Mercedes in Frage
which(companies == "Merc")
mtcars[sample(which(companies == "Merc"), 4), ] # 4 mal Mercedes
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datensätze mit R auswählen ?

Beitrag von jogo »

Hallo grafZahl,

willkommen im Forum!
Ein wenig klingt es so, als ob Du alle diese Kriterien gleichzeitig erfüllen möchtest.
Falls das so ist:
es handelt sich um sich teilweise widersprechende Zielgrößen, z.B. möglichst hohe Leistung und möglichst niedriger Verbrauch an Kraftstoff. Grob gesagt ist es dann eine Optimierung der Auswahl mit einer ganzen Reihe von Nebenbedingungen. Ohne eine passende mathematische Modellierung kann man nur rumstochern. Was R bzw. entsprechende Zusatzpakete leisten findest Du beschrieben in dem passenden TaskView: https://cran.r-project.org/web/views/Optimization.html
Gerne kannst Du auch beschreiben, wie Du es bisher erledigt hast.

Kannst Du uns anhand eines reproduzierbaren Beispieles das gewünschte Ergebnis zeigen? viewtopic.php?f=20&t=11

Gruß, Jörg
grafZahl
Beiträge: 4
Registriert: So Mär 24, 2019 12:32 pm

Re: Datensätze mit R auswählen ?

Beitrag von grafZahl »

Hallo zusammen und danke für die ersten Rückmeldungen.

Also es müssen alle Kriterien erfüllt werden
und von diesem Pool dann die Kombination mit der größten Summe der Zielwerte ausgegeben werden, "also am meisten PS".

Ich habe unten mal die Basisdaten reinkopiert.

Es gibt folgende Kriterien:

Kategorie A mindestens 1 und maximal 1 auswählen
Kategorie B mindestens 3 und maximal 5 auswählen
Kategorie C mindestens 4 und maximal 6 auswählen
Kategorie D mindestens 1 und maximal 3 auswählen
Insgesamt 13 auswählen

Kosten sollen maximal 50 sein

von der Gruppe 1 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 2 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 3 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 4 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 5 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 6 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 7 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 8 sollen min. 2 und max. 2 ausgewählt sein
von der Gruppe 9 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 10 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 11 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 12 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 13 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 14 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 15 sollen min. 0 und max. 0 ausgewählt sein
von der Gruppe 16 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 17 sollen min. 0 und max. 2 ausgewählt sein
von der Gruppe 18 sollen min. 0 und max. 2 ausgewählt sein

Mein Excel Pivot Ergebnis:

Code: Alles auswählen

Auswahl der ID
1001
1002
1024
1032
1043
1077
1080
1085
1089
1090
1120
1137
1143
1 in Kategorie A -> OK
3 in Kategorie B -> OK
6 in Kategorie C -> OK
3 in Kategorie D -> OK
Gesamt ausgewählt 13 -> OK
Kosten 49,9 -> OK
Von Gruppe 8 wurden 2 gewählt, von Gruppe 15 wurden 0 gewählt -> OK
von den anderen Gruppen nie mehr als 2 -> OK

Summe der Leistungswerte = 1310. Wer schafft mehr? :-)

Viele Grüße
Graf Zahl

Code: Alles auswählen

ID;Kategorie;Gruppe;Leistung;Kosten
1001;D;1;172;11,94
1002;C;2;187;11,74
1003;C;1;105;10,1
1004;C;1;121;9,82
1005;C;1;112;9,24
1006;D;9;118;8,86
1007;D;5;117;8,74
1008;C;1;72;8,44
1009;C;8;56;8,12
1010;C;2;125;8
1011;C;1;30;7,8
1012;C;5;41;7,62
1013;D;7;146;7,42
1014;A;3;160;7,4
1015;C;1;88;7,36
1016;A;5;174;7,28
1017;D;2;102;7,04
1018;A;6;149;6,98
1019;D;8;123;6,96
1020;C;5;79;6,78
1021;C;8;97;6,74
1022;B;1;120;6,7
1023;C;1;70;6,7
1024;C;8;159;6,68
1025;C;2;81;6,62
1026;A;11;151;6,52
1027;D;3;145;6,5
1028;D;4;171;6,42
1029;A;7;120;6,4
1030;A;10;144;6,38
1031;A;1;92;6,34
1032;A;2;164;6,28
1033;C;3;64;6,28
1034;C;2;162;6,24
1035;D;4;102;6,24
1036;A;4;136;6,22
1037;C;1;90;6,2
1038;A;8;118;6,16
1039;B;1;90;6
1040;A;12;95;5,9
1041;A;9;124;5,88
1042;C;2;40;5,8
1043;D;4;160;5,8
1044;D;5;130;5,8
1045;C;7;79;5,78
1046;C;9;110;5,7
1047;B;1;52;5,54
1048;C;9;115;5,5
1049;D;12;-6;5,38
1050;D;3;104;5,28
1051;C;7;133;5,26
1052;C;1;52;5,24
1053;B;1;60;5,2
1054;D;5;30;5,2
1055;A;13;59;5,18
1056;D;6;121;5,12
1057;C;2;75;5,1
1058;C;5;80;5,1
1059;D;11;75;5,1
1060;B;8;83;5,06
1061;C;1;11;5,02
1062;B;1;47;4,94
1063;B;5;103;4,86
1064;D;14;73;4,86
1065;C;8;67;4,84
1066;C;8;65;4,8
1067;B;3;75;4,7
1068;B;2;72;4,64
1069;D;13;22;4,64
1070;D;3;22;4,64
1071;C;4;105;4,6
1072;C;5;79;4,58
1073;A;15;129;4,38
1074;C;11;69;4,38
1075;C;2;29;4,38
1076;B;2;77;4,34
1077;B;6;126;4,32
1078;D;6;53;4,26
1079;B;3;77;4,24
1080;C;8;92;4,24
1081;C;9;76;4,22
1082;C;10;76;4,22
1083;B;9;40;4,2
1084;C;9;78;4,16
1085;B;5;97;4,14
1086;C;14;37;4,14
1087;B;14;55;4,1
1088;D;9;89;4,08
1089;D;9;134;4,08
1090;B;4;101;4,02
1091;B;14;60;4
1092;B;2;60;4
1093;B;12;10;4
1094;C;2;20;4
1095;C;13;39;3,98
1096;B;4;78;3,96
1097;B;7;48;3,96
1098;B;13;5;3,9
1099;C;2;5;3,9
1100;C;3;45;3,9
1101;B;11;69;3,88
1102;C;3;34;3,88
1103;D;13;4;3,88
1104;B;6;68;3,86
1105;C;6;72;3,84
1106;C;12;22;3,84
1107;D;10;61;3,82
1108;B;8;50;3,8
1109;C;17;50;3,8
1110;D;15;20;3,8
1111;D;10;70;3,8
1112;B;5;39;3,78
1113;D;2;-2;3,76
1114;B;4;87;3,74
1115;B;10;57;3,74
1116;C;11;66;3,72
1117;B;7;58;3,66
1118;D;10;63;3,66
1119;B;11;60;3,6
1120;C;10;105;3,6
1121;D;15;50;3,6
1122;B;5;68;3,56
1123;C;12;58;3,56
1124;B;2;17;3,54
1125;B;5;76;3,52
1126;D;13;11;3,52
1127;B;3;65;3,5
1128;D;8;15;3,5
1129;B;2;49;3,48
1130;B;16;73;3,46
1131;C;10;73;3,46
1132;A;18;82;3,44
1133;B;10;32;3,44
1134;C;18;47;3,44
1135;C;9;32;3,44
1136;B;7;71;3,42
1137;C;3;81;3,42
1138;C;14;40;3,4
1139;C;5;19;3,38
1140;B;8;18;3,36
1141;B;9;7;3,34
1142;B;2;16;3,32
1143;C;3;91;3,32
1144;C;16;66;3,32
1145;C;9;5;3,3
1146;C;14;39;3,28
1147;C;14;64;3,28
1148;C;6;14;3,28
1149;D;11;74;3,28
1150;A;17;71;3,22
1151;B;6;70;3,2
1152;D;7;70;3,2
1153;B;9;69;3,18
1154;B;11;69;3,18
1155;C;6;59;3,18
1156;D;6;69;3,18
1157;C;4;58;3,16
1158;D;17;58;3,16
1159;B;13;14;3,08
1160;C;16;54;3,08
1161;C;12;-8;3,04
1162;A;16;60;3
1163;B;5;30;3
1164;B;10;10;3
1165;C;10;50;3
1166;B;18;39;2,98
1167;C;11;59;2,98
1168;C;1;13;2,96
1169;C;13;-2;2,96
1170;D;7;38;2,96
1171;D;9;58;2,96
1172;C;13;12;2,94
1173;C;12;7;2,94
1174;C;13;7;2,94
1175;C;13;-29;2,92
1176;B;4;20;2,9
1177;B;3;35;2,9
1178;C;4;35;2,9
1179;C;15;10;2,9
1180;C;13;44;2,88
1181;A;14;43;2,86
1182;B;1;33;2,86
1183;D;7;33;2,86
1184;D;16;68;2,86
1185;C;6;57;2,84
1186;D;12;22;2,84
1187;C;17;51;2,82
1188;D;11;21;2,82
1189;B;11;25;2,8
1190;C;11;40;2,8
1191;C;8;15;2,8
1192;A;4;9;2,78
1193;B;17;18;2,76
1194;C;1;6;2,72
1195;D;9;61;2,72
1196;C;10;50;2,7
1197;B;2;14;2,68
1198;C;17;24;2,68
1199;C;6;33;2,66
1200;C;14;53;2,66
1201;C;10;18;2,66
1202;B;5;31;2,62
1203;C;12;-4;2,62
1204;C;8;21;2,62
1205;C;3;71;2,62
1206;B;4;0;2,6
1207;B;5;20;2,6
1208;C;5;29;2,58
1209;C;7;29;2,58
1210;C;10;4;2,58
1211;C;9;4;2,58
1212;C;8;29;2,58
1213;C;4;39;2,58
1214;C;13;29;2,58
1215;C;10;38;2,56
1216;C;7;38;2,56
1217;C;13;18;2,56
1218;C;6;7;2,54
1219;D;7;2;2,54
1220;D;3;27;2,54
1221;B;15;-4;2,52
1222;B;8;-4;2,52
1223;C;5;1;2,52
1224;C;7;16;2,52
1225;C;13;1;2,52
1226;D;16;6;2,52
1227;B;17;35;2,5
1228;B;12;25;2,5
1229;B;8;0;2,5
1230;C;3;25;2,5
1231;D;18;15;2,5
1232;B;12;-12;2,46
1233;B;12;33;2,46
1234;B;16;37;2,44
1235;D;16;22;2,44
1236;B;7;31;2,42
1237;C;13;6;2,42
1238;D;4;21;2,42
1239;D;17;41;2,42
1240;A;17;0;2,4
1241;B;17;20;2,4
1242;B;17;19;2,38
1243;B;8;39;2,38
1244;C;12;4;2,38
1245;C;4;44;2,38
1246;C;18;9;2,38
1247;D;16;19;2,38
1248;D;5;19;2,38
1249;B;16;38;2,36
1250;B;6;8;2,36
1251;B;4;67;2,34
1252;C;12;-3;2,34
1253;C;6;27;2,34
1254;B;12;26;2,32
1255;B;10;31;2,32
1256;B;7;16;2,32
1257;B;16;36;2,32
1258;C;6;41;2,32
1259;B;18;5;2,3
1260;D;12;-5;2,3
1261;B;9;14;2,28
1262;C;16;24;2,28
1263;B;3;23;2,26
1264;B;6;23;2,26
1265;C;9;23;2,26
1266;B;12;-18;2,24
1267;B;18;11;2,22
1268;D;3;11;2,22
1269;B;12;10;2,2
1270;B;17;19;2,18
1271;B;16;29;2,18
1272;C;11;8;2,16
1273;C;14;8;2,16
1274;B;15;-3;2,14
1275;B;4;7;2,14
1276;B;12;-14;2,12
1277;B;18;6;2,12
1278;C;15;16;2,12
1279;C;17;30;2,1
1280;C;13;-15;2,1
1281;B;11;14;2,08
1282;A;18;13;2,06
1283;B;11;23;2,06
1284;C;17;28;2,06
1285;D;8;3;2,06
1286;D;15;-7;2,06
1287;C;15;2;2,04
1288;C;10;32;2,04
1289;D;3;2;2,04
1290;A;17;51;2,02
1291;C;9;0;2
1292;D;15;0;2
1293;C;16;19;1,98
1294;B;17;8;1,96
1295;B;2;58;1,96
1296;B;14;7;1,94
1297;C;17;5;1,9
1298;C;16;15;1,9
1299;A;2;4;1,88
1300;B;15;-16;1,88
1301;C;11;14;1,88
1302;C;17;14;1,88
1303;D;10;4;1,88
1304;D;17;19;1,88
1305;B;16;13;1,86
1306;B;6;8;1,86
1307;C;16;33;1,86
1308;B;10;12;1,84
1309;B;4;12;1,84
1310;C;14;42;1,84
1311;C;13;1;1,82
1312;A;16;0;1,8
1313;B;13;-11;1,78
1314;C;12;9;1,78
1315;C;4;14;1,78
1316;C;16;14;1,78
1317;C;5;8;1,76
1318;B;11;27;1,74
1319;B;6;2;1,74
1320;D;14;11;1,72
1321;B;9;35;1,7
1322;C;17;-6;1,68
1323;C;12;-16;1,68
1324;D;7;34;1,68
1325;D;18;-7;1,66
1326;B;10;22;1,64
1327;B;16;2;1,64
1328;D;11;2;1,64
1329;C;3;1;1,62
1330;C;15;-19;1,62
1331;B;2;0;1,6
1332;B;4;-10;1,6
1333;A;1;4;1,58
1334;B;16;4;1,58
1335;B;15;-11;1,58
1336;B;18;-1;1,58
1337;C;2;19;1,58
1338;D;14;29;1,58
1339;D;11;29;1,58
1340;D;13;-6;1,58
1341;C;13;-2;1,56
1342;B;4;2;1,54
1343;B;10;1;1,52
1344;B;16;0;1,5
1345;B;15;0;1,5
1346;B;8;-5;1,5
1347;C;15;-10;1,5
1348;C;18;0;1,5
1349;C;15;0;1,5
1350;C;5;0;1,5
1351;B;17;4;1,48
1352;B;13;-16;1,48
1353;C;18;-16;1,48
1354;B;14;-2;1,46
1355;C;4;13;1,46
1356;D;9;2;1,44
1357;C;14;-4;1,42
1358;D;18;-4;1,42
1359;C;18;0;1,4
1360;C;15;0;1,4
1361;C;11;-5;1,4
1362;D;14;0;1,4
1363;B;14;-17;1,36
1364;C;18;2;1,34
1365;C;15;-4;1,32
1366;B;15;-10;1,3
1367;B;15;-10;1,3
1368;D;7;40;1,3
1369;B;15;-11;1,28
1370;C;16;14;1,28
1371;B;12;-12;1,26
1372;C;16;3;1,26
1373;A;8;11;1,22
1374;B;15;1;1,22
1375;B;7;1;1,22
1376;C;17;36;1,22
1377;D;18;-19;1,22
1378;B;4;0;1,2
1379;C;18;0;1,2
1380;D;11;19;1,18
1381;C;18;-2;1,16
1382;C;6;33;1,16
1383;B;14;-3;1,14
1384;D;13;13;1,14
1385;A;14;44;1,08
1386;B;17;4;1,08
1387;B;10;-6;1,08
1388;A;10;13;1,06
1389;A;5;3;1,06
1390;B;6;3;1,06
1391;B;17;2;1,04
1392;A;13;26;1,02
1393;B;18;-34;1,02
1394;D;17;1;1,02
1395;D;4;1;1,02
1396;B;9;0;1
1397;B;4;0;1
1398;C;11;0;1
1399;D;17;0;1
1400;D;7;0;1
1401;D;8;0;1
1402;B;14;9;0,98
1403;D;18;9;0,98
1404;A;14;-2;0,96
1405;A;6;5;0,9
1406;C;15;-31;0,88
1407;C;15;3;0,86
1408;D;15;18;0,86
1409;A;17;0;0,8
1410;A;3;0;0,8
1411;B;7;0;0,8
1412;B;3;0;0,8
1413;C;14;0;0,8
1414;C;6;0;0,8
1415;D;3;0;0,8
1416;D;9;0;0,8
1417;A;11;0;0,7
1418;A;7;0;0,7
1419;A;5;0;0,7
1420;C;6;0;0,7
1421;C;15;3;0,66
1422;D;7;8;0,66
1423;C;10;1;0,62
1424;A;8;0;0,6
1425;A;9;0;0,6
1426;B;3;0;0,6
1427;B;6;0;0,6
1428;B;3;0;0,6
1429;B;5;0;0,6
1430;C;2;0;0,6
1431;C;10;5;0,6
1432;D;11;0;0,6
1433;D;12;0;0,6
1434;D;16;0;0,6
1435;D;6;4;0,58
1436;B;15;-3;0,54
1437;C;18;2;0,54
1438;B;14;1;0,52
1439;C;15;1;0,52
1440;D;18;-4;0,52
1441;A;12;0;0,5
1442;A;15;0;0,5
1443;B;13;0;0,5
1444;C;3;0;0,5
1445;C;7;0;0,5
1446;B;11;14;0,48
1447;C;18;3;0,48
1448;C;14;-6;0,48
1449;C;18;-7;0,46
1450;C;16;-2;0,46
1451;B;14;0;0,4
1452;B;7;0;0,4
1453;C;6;0;0,4
1454;C;10;0;0,4
1455;A;16;8;0,36
1456;C;18;-3;0,34
1457;B;10;1;0,32
1458;B;14;1;0,32
1459;A;12;0;0,3
1460;A;10;0;0,3
1461;B;7;0;0,3
1462;B;8;0;0,3
1463;C;9;0;0,3
1464;C;4;0;0,3
1465;C;12;0;0,3
1466;C;8;0;0,3
1467;A;7;3;0,26
1468;B;11;3;0,26
1469;B;9;1;0,22
1470;B;18;-4;0,22
1471;B;17;1;0,22
1472;B;14;1;0,22
1473;C;15;1;0,22
1474;A;11;0;0,2
1475;A;1;0;0,2
1476;A;10;0;0,2
1477;A;18;0;0,2
1478;A;5;0;0,2
1479;A;13;0;0,2
1480;A;14;0;0,2
1481;A;6;0;0,2
1482;A;3;0;0,2
1483;A;2;0;0,2
1484;A;10;0;0,2
1485;A;4;0;0,2
1486;A;15;0;0,2
1487;A;16;0;0,2
1488;A;4;0;0,2
1489;B;14;0;0,2
1490;B;4;0;0,2
1491;B;18;0;0,2
1492;B;16;0;0,2
1493;C;15;0;0,2
1494;C;4;0;0,2
1495;C;15;0;0,2
1496;C;16;0;0,2
1497;C;13;0;0,2
1498;C;17;0;0,2
1499;C;7;0;0,2
1500;C;14;0;0,2
1501;C;14;0;0,2
1502;D;15;0;0,2
1503;D;4;0;0,2
1504;D;4;0;0,2
1505;D;3;0;0,2
1506;B;3;-2;0,16
1507;D;17;-2;0,16
Zuletzt geändert von jogo am Di Mär 26, 2019 2:49 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datensätze mit R auswählen ?

Beitrag von jogo »

Hallo Herr Graf,
grafZahl hat geschrieben: Di Mär 26, 2019 2:41 pm Also es müssen alle Kriterien erfüllt werden
und von diesem Pool dann die Kombination mit der größten Summe der Zielwerte ausgegeben werden, "also am meisten PS".
so kommen wir der Sache schon näher.
Ich habe unten mal die Basisdaten reinkopiert.
als Anhang wäre es besser gewesen. Ich habe das mal so gemacht, so dass man jetzt die Datei einlesen kann mit

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=466")
Mein Excel Pivot Ergebnis: ...
Was ist ein Excel Pivot Ergebnis?
Was für eine Algorithmus steckt dahinter?
Gibt es Literatur zu dem verwendeten Algorithmus?
1 in Kategorie A -> OK
3 in Kategorie B -> OK
6 in Kategorie C -> OK
3 in Kategorie D -> OK
Gesamt ausgewählt 13 -> OK
Kosten 49,9 -> OK
Von Gruppe 8 wurden 2 gewählt, von Gruppe 15 wurden 0 gewählt -> OK
von den anderen Gruppen nie mehr als 2 -> OK

Summe der Leistungswerte = 1310. Wer schafft mehr? :-)
Bedeutet Deine Frage, dass Du Dir nicht sicher bist, ob dieses Ergebnis optimal ist?

Hier noch ein konstruktiver Hinweis:
https://stats.stackexchange.com/search? ... onstraints
Vielleicht ist es ähnlich wie hier:
https://www.mathematik.hu-berlin.de/~ro ... ckBuch.pdf

Auf StackOverflow gelten Fragen nach der Übertragung einer Lösung von einer Programmiersprache in eine andere als off topic (too broad). Bis jetzt hast Du Deine bisherige Lösung nicht gezeigt.
Hast Du Dir schon das Optimization-TaskView angesehen? Dort gibt es einen Abschnitt mit der Überschrift Combinatorial Optimization.

Gruß, Jörg
Dateianhänge
KFZ.csv
(8.4 KiB) 24-mal heruntergeladen
grafZahl
Beiträge: 4
Registriert: So Mär 24, 2019 12:32 pm

Re: Datensätze mit R auswählen ?

Beitrag von grafZahl »

Hallo Jogo,
Pivot ist eine Excelfunktion in der ich das Szanario durchlaufen lasse.
Ich kann nur sagen wie ich das baue. Ich habe in jeder Zeile ein Feld "auswahl" und damit rechne ich alle Zielwerte aus.
Beispiel:
Es gibt eine Formel über die Felder Auswahl (0 oder 1)
Es gibt eine Formel über Auswahl (0 der 1) multipliziert mit Preis
Es gibt eine Formel über Auswahl (0 oder 1) multipliziert mit Leistung

Dann kann ich Excel sagen was er machen darf (bei den Datensätzen Feld Auswahl 0 oder 1 einsetzen)
und welche Zielwerte getroffen werden müssen (Summe Auswahl = 13, Summe Preis < 50, Leistung = MAX)
und klicke auf start.....

Wie er das im Hintergrund macht, kann ich technisch nicht wiedergeben.
https://de.wikipedia.org/wiki/Pivotverfahren
https://de.wikipedia.org/wiki/Simplex-Verfahren
Das ist mir aber zu hoch, ich habe weder Mathe noch IT studiert :cry:


"Bedeutet Deine Frage, dass Du Dir nicht sicher bist, ob dieses Ergebnis optimal ist?"

Genau das ist der springende Punkt! Excel findet in wenigen Sekunden tolle Ergebnisse, aber manchmal finde ich durch Zufall bessere Ergebnisse und frage mich dann wie das sein kann.

Deswegen kam ich auf die Idee die Frage mal hier zu stellen.

Sowohl beide Links aus auch das Optimization-TaskView / Combinatorial Optimization verstehe ich leider auch nicht.
Wahrscheinlich ist das Thema ohne ohne Vorkenntnisse dann einfach zu hoch?

Gruß,
Graf Zahl
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Datensätze mit R auswählen ?

Beitrag von Athomas »

Kosten 49,9 -> OK
Dann hast Du einen schönen Rabatt ausgehandelt!
Bei mir kostet das Zeug 73.58 :lol: !
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datensätze mit R auswählen ?

Beitrag von bigben »

@Athomas Er hat mit Excel gerechnet. Das ist kein Rabatt, sondern zu akzeptierende Ungenauigkeit.
Wahrscheinlich wurde einer der Zwischenwerte erst als Datum interpretiert und dann nicht mit aufaddiert.

@grafZahl Ich kann Dein Problem nicht einfach lösen, ich denke aber, Du solltest Dir lp_solve anschauen. Das ist ein Solver, der für solche Probleme geeignet ist und mit dem Du nicht auf R festgelegt bist. lpsolve kann man mit R aber auch aus anderen Umfeldern nutzen.

http://web.mit.edu/lpsolve/doc/
http://web.mit.edu/lpsolve/doc/quicksta ... ck%20start


LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Datensätze mit R auswählen ?

Beitrag von jogo »

Hallo grafZahl,
grafZahl hat geschrieben: Di Mär 26, 2019 6:59 pm Pivot ist eine Excelfunktion in der ich das Szanario durchlaufen lasse.
den Begriff Pivot in Verbindung mit Excel kenne ich eigentlich nur als Synonym
für die Kreuztabellierung ...

Wie er das im Hintergrund macht, kann ich technisch nicht wiedergeben.
https://de.wikipedia.org/wiki/Pivotverfahren
https://de.wikipedia.org/wiki/Simplex-Verfahren
Das ist mir aber zu hoch, ich habe weder Mathe noch IT studiert :cry:
... oder den Begriff Pivotschritt (auch Tausch der Basis) als ein Schritt im Simplexverfahren.

Das Simplexverfahren ist aber ein Verfahren der linearen Optimierung.
Du hast es hier aber mit ganzzahliger Optimierung zu tun (oder kannst Du Dir auch ein drittel KFZ aussuchen?).
Ganzzahlige Optimierung ist um etliche Klassen härter als lineare Optimierung.

Mir fällt nicht mal auf Anhieb ein, wie ich Dein beschriebenes Problem formal darstellen kann.

"Bedeutet Deine Frage, dass Du Dir nicht sicher bist, ob dieses Ergebnis optimal ist?"

Genau das ist der springende Punkt! Excel findet in wenigen Sekunden tolle Ergebnisse, aber manchmal finde ich durch Zufall bessere Ergebnisse und frage mich dann wie das sein kann.
oha, das sollte Dich aber misstrauisch gegenüber der Lösung in Excel machen.
Bernhard hat auch einen guten Gedanken geschrieben, wo rein rechnerisch ein Fehler liegen könnte.
Deswegen kam ich auf die Idee die Frage mal hier zu stellen.

Sowohl beide Links aus auch das Optimization-TaskView / Combinatorial Optimization verstehe ich leider auch nicht.
Wahrscheinlich ist das Thema ohne ohne Vorkenntnisse dann einfach zu hoch?
Als Mathematiker kann ich nur sagen:
Das geschilderte Problem ist interessant; es ist nicht trivial, aber es scheint lösbar.

Bei ganzzahliger Optimierung kenne ich nur die üblichen Binsenweisheiten - es ist keinesfalls mein Spezialgebiet.
Du wirst Dich mit Combinatorial Optimization beschäftigen müssen, denn genau darum geht es bei Deinem Problem.

Gruß, Jörg
grafZahl
Beiträge: 4
Registriert: So Mär 24, 2019 12:32 pm

Re: Datensätze mit R auswählen ?

Beitrag von grafZahl »

Hallo Jörg,

dann steige ich wohl aus und muss mit der Excel Lösung leben. Sicherlich recherchiere ich auch mal die Combinatorial Optimization, aber die ersten klicks sind mir alle "zu hoch". Zuviel englisch, zuviel mathe.

@Athomas
Oh ja stimmt, ich hatte das Szanaro für das Forum rasch neu gebaut und einen Formelfehler generiert.
Die beste Lösung von Excel lautet nun:
1024 1077 1080 1085 1089 1090 1120 1132 1137 1143 1154 1185 1195
und erreicht eine Leistung von 1255

@bigben Wenn Excel so schlecht ist, hast du denn ein besseres Ergebnis?

Dennoch danke für alle Kommentare und Hilfen!
Antworten