1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736
|
0.5--------------------------------------------------------
From different old custom FET-MA users, for the Mornings-Afternoons mode, on the forum:
https://lalescu.ro/liviu/fet/forum/index.php?topic=4519.0
- Max days per week for a room (Thai Chi Phoung also suggested, see below, max real days per week for a room, but (in Liviu's opinion), other tricks should work,
since relying on rooms' constraints might be higly inefficient),
- Max hours daily (half day) for a room,
- Max hours daily (real day) for a room (suggested by bachiri401).
Also suggested by Thai Chi Phuong (https://lalescu.ro/liviu/fet/forum/index.php?topic=6112.msg35039#msg35039):
- Can you add a constraint for a certain classroom to only study n days/(actual days)/1 actual week?
Liviu Lalescu:
Could you please tell me the reason for adding the constraints room max days/real days per week?
Thai Chi Phuong:
I have two teachers A and B, and I want teacher A to teach teacher B's hours as well or vice versa, and they also have holidays together, so I want to create
a classroom for these two teachers and have a constraint on the maximum number of days/actual days of the classroom.
- Default 100% or saving the value of min days between activities constraints when adding a split activity (suggested by Mohamed Ait Ichou).
- Drag and drop manual timetabling in the time horizontal view timetables (suggested by Abdeljalil Elghazoui).
- Suggested by BOUHADEF (https://lalescu.ro/liviu/fet/forum/index.php?topic=4501.msg25467#msg25467):
There is an important constraints if it can be added
Max resting hours between morning and afternoon. With the possibility of setting it 0.
This restriction is important for schools that provide food as students cannot be discharged at the end of the morning or the first hour in the evening.
Also important for teachers who live far from the institution. Breaks between morning and evening are tiring for the teacher as he cannot move home.
Also if it is possible to space constraint
As set of activities are in the same room if they are consecutive
with a weight less than 100%.
Also, please add it in space constraint
My important place if possible is
a set of activities occupies minimum different rooms
- Suggested by nguyenhuuduyet (https://lalescu.ro/liviu/fet/forum/index.php?topic=4501.msg25772#msg25772):
Can you help me. I want when entering the teacher's name will be displayed immediately like the official version.
Example: 1. Enter the teacher's name
2. Add
3. OK
Then the teacher's name will appear in item 4
From mohammed, on forum (https://lalescu.ro/liviu/fet/forum/index.php?topic=4805.0):
- Teacher(s)/students (set) activity tag min hours continuously.
From ghani1990, on forum (https://lalescu.ro/liviu/fet/forum/index.php?topic=4729.0):
- Activity(ies) start(s) or end(s) students day.
This was implemented as a custom version for him, but it is ugly/not perfect, because each half day may contain only one
such activity, and the implementation is not perfect (even if ghani1990 says in practice it works very well).
ghani1990 says on that forum topic that this is to ensure that optional activities begin or end the students' day. But a
perfect way to do this would be to divide the students and add all the activities for a students set, all the activities
without the optional ones for another students set, and add max zero gaps for these students.
Also suggested by Ali Doussary here: https://lalescu.ro/liviu/fet/forum/index.php?topic=5155.0 :
- We need a constraint of the kind "a set of activities end students day". But we want the constraint to allow a set of activities
to "start" or to "end" students day. The aim is to have some activities as the first or last activities the students do during
a "Fet day", not a real day.
Also suggested by YOUSSEF HOUIET here: https://lalescu.ro/liviu/fet/forum/index.php?topic=5254.0 :
Is it possible to combine two constraints:
Activities begin student/teacher's day
+Activities end student/teacher's day
to allow an activity to be in begin _or_ end of students/teacher's day.
From bachiri401:
-> In general every constraint referring to days should have a corresponding constraint for real days,
and every constraint referring to mornings should have a corresponding one referring to afternoons.
From Ziani Ben Alia: Please add the following condition: Maximum rest periods between morning and evening for teachers.
Liviu Lalescu: I am sorry, but this is too difficult. But maybe you could use max gaps per real day and max span per real day.
Also suggested by saidmechri: Max resting hours between morning and afternoon for teacher (https://lalescu.ro/liviu/fet/forum/index.php?topic=4951.0).
From Elbouche Mourad, on Facebook: Just a note, can't you improve the feature of printing individual and group tables?
From Smail Smail, on Facebook: We would only like if you improve the output of tables in your program, especially to Excel.
From Abdelhakim Zoumar, on Facebook: We would be very pleased if you make the output manipulable : to make minor changes such as to replace , add , or delete... .
0.75-------------------------------------------------------
From Thành Nam:
Vietnam K-12 schools have some constraints such as: max (min) hours per morning; max (min) sessions (morning/afternoon) per week, max gaps between
morning vs afternoon. Some schools also work at night, so they need the mode of mornings-afternoons-nights. Are you going to implement new version
of FET to adapt that ?
Note from Liviu: Some suggested constraints are already implemented.
1----------------------------------------------------------
From Liviu Lalescu:
These are some rather technical problems, for developers, referring to some possible improvements in the generation code:
- In the initial order, in nIncompatible, consider also teachers(students)IntervalMaxDaysPerWeek, like in teacherMaxDaysPerWeek
- Make students max gaps per day perfect. This is very difficult/complicated. Any bug/mistake would be critical.
- Instead of if-else, use switch in rules.cpp when there are many alternatives (like in modify teacher or read time/space constraints).
Also in the all time/space constraints dialogs in the interface. -> PARTIALLY DONE, only remaining is reading constraints, where
we compare strings.
2----------------------------------------------------------
From Volker Dirr:
Disable menus and shortcuts (in FET main form) if they are currently not
usable. For example: Disable teacher constraints, if there is no teacher
in the dataset. Disable space constraints if there is no room in the
dataset. (Disable means: Just make them unavailable/gray. Don't hide
them. Do it like OpenOffice.org, Firefox, etc.)
3----------------------------------------------------------
From Horatiu Halmajan:
Max gaps constraints with weight under 100%
Liviu: This is very difficult.
4---------------------DONE---------------------------------
5----------------------------------------------------------
From daviodan:
I will refer to sample_Brazil_more_difficult_max_2_gaps_for_teachers.fet
1. In the FET activities dialog there exist more filters after the teacher, group, etc.
If we choose for instance the subject "Math" and we do the filtering also after the name of
the teacher, then the list of the filter should contain only the name: Bruna,Silvania,Wellington,
because only these teach Maths. In the present moment the filter contains the list of all teachers.
The same for all the other filters.
2. In the teachers' statistics dialog, when we click a teacher, there should appear in the right
in a box all the constraints for this teacher inputted by that moment.
6----------------------------------------------------------
From Volker Dirr:
for code cleanup always use the same style:
some constraint c have
c->teacher_ID
others have
c->teacher_Index
7----------------------------------------------------------
From Azu Boba (modified/updated by Liviu Lalescu):
About timetable view teachers: ... I propose is to
have fixed cell height and width so it would be easier to comprehend and
pinpoint what you see when switching between teachers.
We have a 3D table (teachers/days/hours). I propose to
add a new view named e.g. "View (day for teachers)" (of course you keep
the "View (teachers)" too). This view will be similar to "View
(teachers)" but it will have all the days as selectable tabs on the top.
The 2D table it will display below the tabs would be the Teachers/Hours
view for the day selected. The buttons and functionality will be the
same as in the case of "View (teachers)". ...
The best part though is that with this
new View you will be able to better comprehend/modify the schedule in a
day by day base...
You might also want to consider adding an additional flag when locking
an activity. This flag might be called "Save data and timetable flag"
and would be set when an activity is locked automatically during the
"Save data+timetable as..." procedure. Why? Mainly, because when you
want to unlock e.g. a specific day in a "Save data+timetable as..."
saved timetable you do not want to unlock all the activities of the day;
you want unlocked only the ones that were locked by the "Save
data+timetable as..." process. There are activities that the schedule
creator manually locked them before FET generated the table (e.g. a
specific lesson needs to happen only on a specific day and time). By
selecting and unlocking a whole day as things are now you unlock these
activities too! This means that if the schedule creator doesn't pay
enough attention he might mistakenly create a schedule with activities
set at undesired hours. The solution I propose to this is to toggle
between locked/unlocked only the activities that have the "Save data and
timetable flag" set. To unlock the manually locked ones the user would
have to do it in a different/manual way (see the paragraph below about
the editable "Details" box) or even better be asked with a message box
if he wants to unlock the manually locked activities too.
I also mentioned that in order to remove a teacher from a specific day
(because he is ill or on a leave) I have to go to "View (teachers)" and
pinpoint all the activities assigned to the teacher for this day
(checking their IDs from the "Details" text box and then writing them
down in notepad). Then I close this view and go to the "Activities"
list, find the specific activities and uncheck "Active" for them. This
is a little annoying and a prone to errors procedure especially if there
are more than one teachers missing. What I thought as a solution for
this has to do with the "Details" text box on the "View (teachers)". It
would be great if it wasn't just a simple text box but an editable
interface for every changeable value. What I have in mind is to split
the "Details" into two parts; the upper part would include all the non
editable values while the lower part all the editable ones. Right now
for me, only the "Active" and "locked time" values are worth of being
editable, so simple check boxes would suffice but someone else might
want other values editable too (e.g. Total number of students, duration)
or new values worth being editable might be added in the future, so it's
a good thing to have.
Last but not least (and certainly the most difficult modification) it
would be great if you could drag and drop activities in the "View
(teachers)" and "View (day for teachers)" GUIs. Of course by doing so
you create conflicts and this will need handling. But I think all the
before mentioned changes are enough work for you now and I need to think
this a little more to come up with a viable solution.
8----------------------------------------------------------
From Marco Barsotti:
The only thing that I would like to find in a future version of FET is the
ability 1) to find when a combination of constraints is impossible to
respect. 2) to recognize which constraints generate a bottleneck, where FET
stand by searching the little hole where to pass and go on, placing
activities.
9----------------------------------------------------------
From Saad (on forum):
Manual improvements of the timetable.
10---------------------------------------------------------
From Volker Dirr:
Change remove redundant to deactivate redundant.
11---------------------------------------------------------
From Volker Dirr
I got reports from a user that he had trouble to find the correct
output files today, because there were so many files in the directory.
just maybe:
maybe write only the index file into the result directory. then make 3
subdirectories. one subdirectory with all html files, one with all xml
files and one with all csv files. so we don't need the export menu
anymore, because it is exported always by default and the directory is a
little bit more tidy.
12---------------------------------------------------------
From Volker Dirr
We have:
1. category: 3-4 classes
2. category: 5 courses
3. category: 4 religions (always same time, so i didn't enter it)
4. category: several working groups (afternoon lesson, so i add them
manually)
Now have a closer look:
4 classes * 5 courses * 4 religion is already 80 subgroups.
so if i also add working groups (lets say 5, but there are more!)
then we have total 400 subgroups.
that is absurd, because i have only around 100 students in a year!
i think in that case it is wise to enter data not in groups, add
students
individual.
that is like high school do it.
- add a year.
- add groups (NOT with split year, but same names)
- add a group ALL STUDENTS.
- add subgroup with all students names into ALL STUDENTS.
- now we need a table to every year:
- horizontal are the division names (must not be group names, but
can)
- vertical must be the student names
- every cell is a bool checkbox
no the timetablemaker can check every single student. of course by
checking the studentsname must be added as subgroup into that group.
13-------------------------DONE----------------------------
14-------------------------DONE in FET-6.0.0---------------
15---------------------------------------------------------
From Volker Dirr
how about displaying "minimum home
room hours" and maybe also "maximum special room hours" in the teacher
statistics? because a timetable maker (maybe) need that for his
planning.
16---------------------------------------------------------
From Danail Traichev:
You see, this division in subgroups is very complicated - to understand
and to add by hand. And at the end you came with a lot of subgroups that
have only formal sense, for the algorithm, but are visible in dialogs,
in the final chart and everywhere. It should not be like this. One will
have to divide years in wizard-like dialog, with questions:
1. How many classes you have for this year?
2. Define courses for which students from this year study together
3. Which of these curses start at same time. Group them by this criteria
4. Define from which classes came students for these courses. Whole
class is caming, or only part of it? Where other part goes - have rest,
or has another activity, and if yes - which one?
5. Define teacher that is teaching in every course.
This is a draft, but some wizard like this will save *a lot of*
mistakes, and will make program much more user friendly. Then you can
add internal groups, but not show them to users, or at least show if
they set some option. Show them only groups and subgroups that they need
to put in activities, and show these same in final html output.
This is my opinion of user in trouble :-)
Second set:
1. DONE - Ability to select more than one constraint and delete it, or set its
weight
2. Ability to disable all informative and warning messages, or to display
them in status bar or in another log window.
3. Option to remember last focused control in dialogs - very useful if
you want by keyboard to open many constraints and change their weight
4. Constraint "longest gap is n hours"
5. DONE? - A way to save last generated timetable and reopen it again (for example
for printing it with different html level, or for viewing it.
6. Ability to show free teachers for every position in students and
teachers timetable - very useful if you want to find somebody to replace you
17---------------------------------------------------------
From my80s:
also in program we have
a matrix with days x hours = n x n
if this is allocated from some activity it should get error in
precomputing in real time
if we put another activity 100% in same cell
that would take less time to find mistakes
18---------------------------------------------------------
From my80s:
export as odt (OpenOffice.org) table (spreadsheet)
See also item #310
19---------------------------------------------------------
From Danail Traichev:
If you make it how it is now with years, groups and subgroups, it will not
be complicated for entering and even will not need change in most
constraint dialogs. What I mean - define "groups of subjects", and allow
"group of subjects" name to be used in every place where subject can be
used. Much like it is now with student sets - both student years, groups
and subgroups are placed in one control and added from one place.
But of course, I don't know how this will fit with FET internals. And FET
is fine even without this. It simple will make entering constraints a bit
easy. The other posibility is if every activity constraint dialog has a
posibility to select multiple activities, and to filter them by "subject
group", or at least by "selected subjects". That will make entering
constraints like in my case easy.
20---------------------------------------------------------
From Volker Dirr:
maybe it's possible to do Form::setLayoutDirection(Form::LeftToRight) only to the filename or language in menu.
(bracket bug in Arabic translation)
21---------------------------------------------------------
From Volker Dirr:
I saw at Les's timetable, that he called hour==period.
also at Wikipedia it´s called period. (see School_timetables chapter, terminology)
I am not sure about that. in German we have the also the word "periode",
but we don´t use it for timetables. we say hour.
but maybe that´s just colloquial language. this colloquial language is ok,
because the schools have 1 schoolhour (45 minutes) or 2 schoolhours (90
minutes).
but maybe it´s better to use also the word periode, because by this
schools with 60 minutes activities (2 periods) and 90 minutes activities
(3 periods) don´t get trouble with the word hour (because it entrap /
ensnare /
inveigle so write 1 hour and 1,5 hour. but "hour" is an integer value!
but on the other hand people (maybe) will not understand immediately the
word period.
so maybe we should write "period (hour)".
22---------------------------------------------------------
From Volker Dirr:
maybe change "current constraint" into "description", "constraint
information", "description of the selected constraint", ... (very very low
priority, maybe one day)
23---------------------------------------------------------
From Volker Dirr, regarding translation:
1. maybe it's better to be more exact. example: phrases "min hour" better "min hour per day"
2. sometimes the english version isn't always the same.
sometimes you wrote "add current activity"
sometimes you wrote "add activity"
sometimes you wrote "add current"
sometimes you wrote "add"
i think it should always be the same.
also sentence like: "You have to know that this constraint ..."
should only be: "This contraint ..."
3. maybe "start" should be "generate" in the generateform.
4. - if you wrote one or more sentences, please always end with ., ! or ?.
- sometimes you wrote "students subgroups", i think you just need to write
"subgroups", because teachers have no subgroups.
- all "add", "modify", and "remove", "close" phrases should only contain
this word. no more words like "current" or "group". maybe wrote them with
QObject, because nearly every dialog have this 4 phrases.
5. i think we should think and write a small definition note for english
phrases.
it looks like in a few times this terms are not always used same/correct:
hour
duration
period
lesson
activity
when we write a small definition note, then we have to care about this:
words must also be correct for schools that don't use "hours" as one time
hour.
in Germany one school hour is 45 minutes. but that's no problem. we use the
same words for that.
but i remember a letter, a user wrote that he has 60
minutes hours and 90 minutes hours. so he defined 30 minutes "hours" and
set duration == 2 or duration == 3 to the activities.
so the definition and use of hour, duration, period and lesson must also
match to this.
please let us first a small definition not for this terms:
hour, duration, periode, lesson, activity
this will help if we add new or modify old english phrases and it will
also help translators.
6. - DONE in FET-6.22.1.
7. and it looks like we shouldn't use the word "lesson".
in the most phases it's better to replace "lessons" by "subactivities"
8. that is also why i already asked you to change english translations,
because some phrases can be shorten.
for example all sentences with "you", "current" or "that mean" can be
shorten (in english and german).
example:
"If you insert current group to current year, that means that some years
share the same group (overlap)"
shorten version:
"Some years share this group if it's inserted."
9. and a maybe other thing. example:
view in fet-mainform.
there is "Time contraints (teachers)".
and in this folder is for example "Teachers max gaps per Week".
i recommend to write just "Max gaps per Week".
Reason:
- it's shorter
- it's clear that it "teachers" contraint, because it´s in that folder
the English version looks fine, because you are always possible to write
first "teachers". (except on min days between activities. You
are not able to write Activities first.)
In German translation it is much more difficult the write "teacher" always
first. even including the word teacher is a much longer phrases than in
english. it will be much easier and nice, if we don't write teacher here.
maybe the same problem in other languages.
24-------------------------DONE----------------------------
25---------------------------------------------------------
From Volker Dirr:
For multiple generation:
Maybe add a checkbox "shutdown after job is done".
See also item #475
26---------------------------------------------------------
(see also entry #194)
From Volker Dirr:
long time goal: code cover planning.
27--------------------------------------------------------
From bmlahcen13:
for that i advice to start thinking from now to
- enhance the UI
- use Database
- add web client
- use UML models
and also for the structure, use "int id", this will
enhance both runtime and will reduce the storage,
because in the FET xml files, for example to store and
activity, you have to write again the name of the
subject, teacher, students and also the day and time
slot in a solution. the same happens in time and space
constraints, these 3 entities represent a big
percentage of the size of the file, so you use int IDs
and not names you will certainly gain a lot of space
and also a better execution time, i know, as you said,
that the internal structure uses int id but for
loading and saving xml files and searching, the usage
of strings delays them.
Liviu: maybe it would be better to compress the input file
28--------------------------------------------------------
From more users:
Improve the user interface - add help and wizard.
29--------------------------------------------------------
From Michael Towers:
What about a rewrite of the front end in a scripting language - e.g. Python? It might speed
development and help debugging. It could also make maintenance of the code easier.
Is there some way of doing "interactive" timetable development? The human would make
suggestions, or place some items, run the program, maybe move a few things around, run the
program again ...
A clear and clean interface to your engine as an entity separate from the
input/output might be useful.
It seems to me, it should be possible (but of course only after a lot of work!) to have
a beautiful manual timetable editor (which can also print the various timetables, and
perhaps save the data sets and results in a database) with an interface to an automatic
timetable scheduler which can be used to speed up the work."
30--------------------------------------------------------
From TheStar:
A constraint to think about is that some activities, and I suspect 'normal school management'
talks about teachers as in "One teacher per x students".
In the HSC year here, it's about one teacher per 26 students (or something like that).
At a recent excursion, it was one teacher per 10 students. Hope that helps :)
Liviu Lalescu: Of course, you can add each student. I could have implemented this solution.
But I doubt that the user has such patience.
You could always autogenerate the students...
"Quick-Build Students"
[Properties]
[Number]
(Build)
And it will generate students with name: AutoGen-11231, ID: 11231, and the like.
The user could then 'select' groups of these students... and... (Just an idea)
31--------------------------------------------------------
From Abdul Hadi Kamel:
Do you have a plan in mind to upgrade the existing fet from standalone
application to a client-server/web-based database oriented type of
application in the future. This is because the current fet is quite limited
especially in terms of timetable data which cannot be keyed-in /view s
amongs several users at the same time. This will cause hardship because the
people involved in making the class timetable in universities normally
consist of several key persons from different departments. Using standalone
application by several persons sometimes make data consolidation process
among departments become difficult and error-prone
I think it will be better if the FET can support a single timetable data
repository (using client-server model) in a database that can be input/view
by several users simultaneously.
32---------------------------------------------------------
From Volker Dirr:
If you think that other people don't like this default constaint how about
making a menu "default settings". there you can add "language" and my
default wish. maybe there are other parameters, that can be set in this
settings. I guess that there a people who want set duration to 2 or 4 by
default.
33---------------------------------------------------------
From kdsayang:
I would like to see FET generate the time table in
1. certain amount of time for each time table
2. with some setting about the remaining weight soft conflicts
3. generate multiple variants
For example
(A) rules are
(i) the user select to generate 10 minutes time limit for each time table
(ii) user set 0 for remaining weight soft conflicts
(iii) the user select 10 variants
the outcome
(B)
(i) the time table finished and it has generate 10 time table that concur with 0 remaining soft conflicts for each time table
(ii) the time table finish and it only manage to get 5 variants from 0 remaining weight soft conflicts
(iii) the time table finish BUT it don't manage to generate any variants with 0 remaining weight soft conflicts
refer to (B)(iii)
the user can change
(i) longer run time to generate time table (with crossing finger) hehe... Others setting is not change
(ii) longer run time to generate time table with increasing value for remaining soft conflicts (0.5, 1.0, 1.5 etc)
As you can see in timetable --> generate multiple variants, features in (A)(i) and (A)(iii) are already there. I hope that you
can figure it out on how to implement the feature in (A)(ii). It would be marvelous.
34---------------------------------------------------------
From kdsayang:
If a user want to add "an activity have a set of preferred rooms", the user will need to click one
by one to add right???... So, I would like to suggest that we group them like when user want to add
an "activity". There (activity), we can select by years, groups and subgroup for students. Instead of
clicking all the student groups in years 1, user can just click year 1 to include them all into students....
For example for rooms (room group then room subgroup)
HALL
Hall A
Hall B
Hall C
TUTORIAL
A-A1
A-A2
B-A1
COMPUTER LAB
Lab 1
Lab 2
Lab 3
So when user want to add "an activity have a set of preferred rooms" for all the tutorial room, instead
of clicking 20 tutorial room one by one, user just click the group that is Tutorial. Easy right???
35---------------------------------------------------------
From kdsayang:
What I meant is in Data --> Time Constraints --> Teacher Time Constraints --> A Teachers not available time,
1. If you double clicked Afida,
2. It will show Afida not available time right.
3. Then if you want to change Sambilan not available time by choosing Teacher drop down menu, nothing happen. In fact, It still shows Afida not available time.
4. So, if you want to change Sambilan not available time, you have to clicked Cancel button first,
5. then double clicked Sambilan.
6. Now you can see that Sambilan not available time is updated.
My suggestion is that It will be better If FET can update to Sambilan from Afida in Step no 3.
36---------------------------------------------------------
From kdsayang:
I have some other suggestion.
1. It will be GREAT if FET can be turn to tree structure. We can show/hide the structure
2. In the tree structure, we can use the copy, cut and paste to edit the subject, activities, etc in the tree structure
37-DONE for teachers? Teachers-not available time horizontal views--
From kdsayang:
If I want to change many teacher not available time, I need to add one by one although the teacher not available time is the SAME.
So, I suggest that you can add a set of teachers not available time. Same as rooms not available time feature.
38---------------------------------------------------------
From kdsayang:
On current version, there is no group for subject and teacher. It is quite annoying if you have to look for certain subject X and teacher Y in that list. When the list grows bigger (let say 100), it's kinda hard because you have to find that lecture and subject in that 100 lists. Although the sorting is a good way to find the subject and teacher, IMHO maybe we can make groups in that teacher and subject section
For example I want to find teacher X and subject X. Teacher X is a teacher that teach Diploma IT student. So, I just search that teacher in Diploma IT group rather than searching 100 other list. Same as subject X.
This feature is needed if my/our/your university/school is a big one where teacher and subject are hundreds.
39---------------------------------------------------------
From Zsolt Udvari:
We've created a timetable but the rooms aren't. So we do it by hand.
How can I change in FET the rooms simpler in a generated timetable?
The times are locked.
It would be the most simplier when I open e.g. the teachers timetable,
click on a activities and I can add room to this.
Liviu:
I'm sorry, but you'll have to add manually constraints activity preferred
room for each of the activities.
I am not sure I understood correctly the problem, if not, please excuse me
and explain more detailed.
Yes, imho you understand my problem. I hoped that there is a simpler
solution. So, maybe in the next releases would be nice: when a
timetable is generated, user can changes/sets the rooms (only the
activities without rooms of course) from the timetable (Timetable ->
Show teachers/students): you select an activity, you click a button
with "Assign room" and choose a room.
40---------------------------------------------------------
From Naji:
Hopefully, FET's team can enhanced it to be able to export the xml data to database, that will facilitates the
output of the data and enables programmers to engage it with their programs.
41---------------------------------------------------------
From Massimo Mancini:
This is a request for a new feature...
For Teachers and Subjects I like to use a brief description (BD), a code, and I optionally convert it to corresponding long description (LD) in the generated timetables (I refer to my current timetable procedures). So I need to define two new fields. Example:
Teacher: MANC, MANCINI
Subjects: MAT, MATEMATICA
I think that this can be achieved without any change to current interface, simply using the format above. Of course I want use the BD only in defining activities and when I have to specify subject and Teacher.
I wish to output the brief (only BD) or complete (LD) timetables
42---------------------------------------------------------
From jaspal:
INSTRUCTION FOR ALLOTMENT OF SUBSITUTION/ ARANGEMENT PERIODS
On a particular day, faculty can be on leave, or may be busy with some
other work hence unable to take the assigned classes. Thus, the classes
taken by those faculty members are to be assigned to some other faculty
members.
Facility of keeping track of back log periods due to absence or
unavailability are to be recorded year and group wise in the software.
Also extra periods taken by the faculty has to be recorded year and group
wise.
43---------------------------------------------------------
From ßingen:
For the internal organization of my school, it's convenient to have a general timetable for each
group, A and B, and our timetabling software gives it. But as you observed, the footnote legend
style it's not probably the best, as it's a little bit difficult to understand. I think in FET a good
solution could be to be able to define a group of activities for a group (for example A, or even the whole
year A and B), and then subdivide this group of activities in many subactivities, each of them
with its own teacher and classroom (I have read the term "subactivity" in the manual, but I
can't find a definition of it, nor find it in FET menus). So a group would be attending many
activities at a time, which is not possible right now in FET. Maybe if it represents a structural
problem FET could define internally subgroups, but being transparent for the user. This activity
group should have a user defined name to identify (for example "Optative 1"). And then inside,
each subactivity would have the real subject ("French language", "Arts", etc.). In this way the
user would avoid to define such a great number of subgoups, and in the teacher's timetable
everything would appear right and clear, with no reference to the activity group, just to his own
subactivity, and with information of room besides of the group (opposed to the pseudoactivity
solution to book the room).
In the group timetable, the common activities would appear as always, and the others would appear
with the activity group name. Then parallel timetables with blanks in the common activities and
one of the subactivities for the rest could be printed . So we would need as much timetables as
the maximum number of subactivities of the largest activity group. Maybe the subactivities could
be diplayed in couples to avoid many timetables, as it happens now with group timetables and
"same day+hour" activities.
These parallel timetables could be hanged up on the classroom board, and, of course, each pupil
should know which of the subactivities has to attend. I think this display should be clearer than
the footnote legend style. I don't know if I have explained it clear enough, but if not I could
send a spreadsheet with an example.
Also, with this solution, if no activity group are defined all works as before, so we would avoid
the problem commented by Liviu of people not needing it.
44-------DONE since FET-5.19.0-(10 January 2013)-----------
45---------------------------------------------------------
From Massimo Mancini:
SUGGESTION BY: Massimo Mancini
WHERE: add activity form
WHAT: a check box to lock the total duration of activity
WHY: to introduce an automatic check and alert on the sum of durations of
single subactivities (currently the total duration reflect always the sum,
so if you alter the single duration, FET recompute the total, this can be
what you want or maybe not)
WHEN: all new future are always ASAP :-D (the programmer says...)
FURTHER DEVELOPMENTS: a templates system for automatic generation of activity based
on year and subjects expected for a class of that year (normal Italian
situation, abroad I don't know ;-)
46---------------------------------------------------------
From ßingen:
- In my school the timetable is divided in morning (from 8:00 to 14:30h) and afternoon (15:00 to 17:00h). In the morning there's a break from 11:00 to 11:30h.
I have defined this break as an hour of the timetable, but not allowing activities for any set of students in this slot. The reason is to plan the surveillance
of the teachers in this slot. There must be always 2 teachers looking after the pupils during this period, so I define activities without students.
The problem is that if a teacher does not have surveillance at break time, it should not count as a gap. If I define this slot as break in "Misc time constraints"
then I can not define the surveillance activities.
- We try that all the teachers work maximum 2 afternoons per week. This has been easy to define with "All teachers work in an hourly interval max days per week".
But we try also that teachers who work two days per week in the afternoon to have a free morning. I don't know how to define this situation.
47------------PARTIALLY DONE IN FET-6.11.0 on 23 October 2023 (done for activities and time/space constraints)
From T. Renganathan:
You can include a provision for multiple selection of subjects, teachers,
activities, etc., for example using Ctrl or Shift key. This will especially be useful for deleting
multiple entries.
48---------------------------------------------------------
From Volker Dirr:
Volker:
if i am in FET->Data->Subjects
i can't see at the right side all constraints.
in my latest sample files for example the "a set of subactivities has a
set of preferred time slots" is missing to that subject.
also in FET->Data->Activity Tags are not all constraints displayed.
Liviu:
Yes, I know, because these are related to activities. I chose not to show them.
Volker:
please add in TODO. i think this is a nice feature we should not forgot.
Liviu:
I thought about your proposal. I think it cannot be done and I know the reasons why I didn't do that:
a constraint activities preferred starting times has subject "" or specified. If it is "", then it is for
all subjects. So, I should write all constraints of this type with subject "" for each subject. But this
is not correct. A constraint might have a teacher who doesn't have this subject.
49---------------------------------------------------------
From Volker Dirr:
by the way we should add a new tests before generating a timetable:
if 2 activities are grouped, then turn of min n day constraint of that
activities.
if 2 activities are consecutive, turn of min n day.
if 2 activitives have same starting time, turn of min n day.
or the opposite, depending on what has a higher weight.
maybe instead of turning of maybe just warn the user that this two
constraints are not acceptable at the same time and tell him he should
care about that problem first of all (by removing or reducing weight to
0%).
50---------------------------------------------------------
From Les W. Johnstone:
Hi Liviu,
I'm into the thick of it again scheduling...
now working on two different schools...
Sacred Heart College is not a problem since they use a five day blocked
schedule. Saint John's College though is a slightly different problem...
They have a five day AB schedule...
which means I entered two activity groups... one for week one and one for
week two and used different activity tags... w1 and w2 to keep things
separate, with specific rules of placement of w1 in Week1 and w2 in week
2...
However, your spacing feature doesn't work ... not on more than five
days.... not sure it would be possible to extend your logic or not... (what
do you think?)
51---------------------------------------------------------
From Chafik Graiguer:
Liviu:
There is no easy way to remove a component.
Chafik Graiguer:
well
to re-use last year .fet file,
what about
-removing all activities at once, so Data keeps only subjects, teachers and groups ?
or
- removing all teachers from all activities (because teachers don't teach the same groups every year)
or
- removing all groups from all activities
Liviu:
I just looked in the sources and it seems that in statistics I only count active activities. Please verify that, though.
Chafik Graiguer:
yes !
and I spend nealy ONE hour counting periods for teacher Eng1!!
in Statistics, teacher Eng1 has only 20 hours
in Data ---> activities, I count 21 hours :-)) for him
finaly, I realised that I has deactivted one hour component by mistake
so, is it possible to add this line into activity window:
Quote:
Activity:
Teacher=fr4
Subject=fr
Students=2Lg -1
Id=1
Activity group id=1
Duration=1
Total duration=5
Total active: XX
Active: yes
Total number of students=0
-----------addition:
Chafik Graiguer:
- removing all groups from all activities
sorry, removing groups does not make sense, because, activities should keep group's information
Groups have the same set of activities every year
So the most important is:
-removing all activities at once, so Data keeps only subjects, teachers and groups ?
but this is not so good, as we will lost time and space constraints related to those activities
So, the best of the best is:
- removing all teachers from all activities (because teachers don't teach the same groups every year)
so we can re-assign new teachers to groups
52---------------------------------------------------------
From Massimo Mancini:
Consider this:
1. I inspect the activities of a teacher (via filter on teacher)
2. I see the lack of an activity (or I delete one or more filtered
activities because I want redefine them)
3. I push the add buttom... why the subjects aren't
only those that teacher teach?
A more general question... why not associate in advance the teacher with
his students and with the subject he teaches? In this way I could obtain some
type of automatic filter.
If I add an activities of mines I select MANC but MANC teach MAT in GEO_1B,
GEO_2B, GEO_3B and IGE_1A. The program should be aware of this.
53---------------------------------------------------------
From Massimo Mancini:
When I review generated timetable with view (teachers) menu option I can lock/unlock
the placed activities and this is ok. But why I cannot do the same for
empty cell? The meaning of locking an empty cell should be to add/modify a
Teacher not available constraint or something that have the
same effect... so a new generation leaves those positions untouched.
A I said I would to lock/unlock some students or some teacher and
recalculate the rest.
54---------------------------------------------------------
From Frans Cilliers:
About campuses: What I thought is the following. Currently you have min
gaps between buildings and maximum building changes per day. If this can
also be done for campuses, for example minimum gaps between campuses for
teachers. (An extra constraint but it will probably be to difficult as
you mentioned)
55---------------------------------------------------------
From K:
Maybe you remember my post from April (many teachers – many groups). Since
than in our team we’ve been trying to adapt our internal solutions to use
FET (it is really your great success).
We tried to use FET to solve timetable for a pretty big plan and by the
way we had to solve a few problems and got some experiences as an
end-users. Maybe it would be interesting also for you.
...
The third problem was to export data from the program we use for planning
(a database application) to FET and than import data back. I pre-assumed I must
enter data to the FET automatically as the number of activities and
constraints is too high to handle them manually. Also a plan generated by
FET had to be automatically imported to our database. I used FET
procedures to import teachers, students and rooms. I also tried to use
FET import procedure for activities too but I had a problem with IDs. FET
generate its own ids but I needed to use my own ones to keep link between
data in the database with those in the FET so finally I decided to
generate input file instead. Fortunately FET doesn’t change ids and
generate perfect XML file with generated plan and
thanks to known ids I could import data from FET to our database with no
problem.
The next point. Due to number of constraints we have in our database I
used similar procedure to generate a part of FET input file with teacher
time constraints and room time constraints. Hence I have a question.
Would it be possible to include file path into FET input file to keep
data in a couple of separate files as working with 100 000 lines file is
not fun?
We prepared the whole procedure for timetabling with FET. First we
planned (in the database program) activities for VIPs manually. To use FET
we also had to put into the timetable all activities where students from
one group could choose one activity from a several ones (languages and
some lectures) at the same time. That is why in the input files are so
many “permanently locked” activities and activities with many groups and
only 10 students to avoid conflicts with room capability (I used
<Activity_Tag>UL to mark them). Together with these activities we locked
a room by preferred_room constraint. After that I included prepared data
to the FET input file and after all we started to generate
the plan. Fortunately FET is smart enough to find mistakes in locked
activities (room and time conflicts) so than we removed conflicts for
already planned activities.
By the way – during reading the input file I noticed the error
that rises when the number between tags:
<Number_of_Not_Available_Times>NUMBER</Number_of_Not_Available_Times>
was not exactly the same as the number of constraints in the file. Of
course it is not a bug. It never happens if user use FET to input
constraints. But it forced me to count constraints during generating data
and shows that program is rather “sensitive”.
The first hint for other users is to start with minimum number of
constraints and if FET would generate the plan than thinking about adding
the next ones. In TODO file I found the suggestion of “possibility to
disable constraint without removing it. Such 'Active' checkbox like on
activities dialog”. I admit – it would be nice. Moreover finding a good
plan is just like using 10 knobs increasing one constraint and decreasing
the other so fast access to the constraints window is crucial. I suggest
to put “Time constraints” and “Room constraints” buttons also in the main
menu (or creating any other shortcuts) as these constraints are rather
deep in the menu.
The next suggestion is to change the interface for some constraints
(particularly wherever there is a long list). For instance for the
constraint Max day for a teacher per week if we have many teachers a
simple table like:
| Teacher Name | Max days|
| teacher 1 | n |
| teacher n | |
with a button “Save all changes” would be great. Now we have to enter
value for every teacher one by one in separate windows.
After setting constraints we tried to generate the next version of the
plan. We added more and more constraints (for instance WOLNE – dump
activities - free day for student or increasing max day for teacher) and
I was really surprised when FET coped with that. It took from about 1,5
minutes (almost no constraint) to over 20 minutes (with many constraints).
With too many constrains after
about 10 minutes when I saw no change in the number of placed activities
(neither up nor down) I cut simulation, removed some constraints and
started it over.
The second hint is not to change too many constraints in one simulation
as it may lead to impossible timetable and than it is difficult to say
which particular constraint was too much.
Of course there is a lot of work to do. For instance even when two
consecutive activities are placed at one day (the same group and the same
teacher) sometimes there are placed at different rooms what would force
them to needless changing room. I guess that FET is focused on fulfilling
constrains but not on optimizing timetable. Sometimes simple changing of
two activities makes plan better both for students and teachers. I think
that manually improving generated plan is faster than creating many many
more constraints and repeating simulations. And this is the third hint.
56---------------------------------------------------------
From Chafik Graiguer:
When a user click on Data ---> activities
he is presented with a list of all activities because filter fields are empty
all activities are listed based on Activity Id
Now, is it possible to a add sort feature like this
Sort by:
Teachers
Students
Duration
Subject
Act Id
So for example, if you select teachers, all activities will be listed alphapetically in a ascendent order
57---------------------------------------------------------
From Massimo Mancini:
In advanced lock/unlock I would lock/unlock on teachers basis (with pick up
the teacher from list of teachers) or on students groups basis (always from
a list) The lists are mentained from subsequent generations and saved with
data.
58---PARTIALLY-DONE in FET-6.12.0 on 3 November 2023--------
(see also items #149, #368, and #396)
From Massimo Mancini:
I have another suggestion: a history file where you record all the actions
of the timetabler and theirs effects. If the history was visible in a frame
in the View timetable forms, I would see scroll the messages without interruption
and with the opportunity to review them (please don't answer that is too
complicated... you can use a tab widget, a tab for the current situation
another for history... the right answer is: GREAT! I add it in TODO! ;-))).
In general an history file should be a great thing and the base for
undo/rollup features.
59---------------------------------------------------------
From George Milliotis:
I propose the ability to sort constraints by:
1. Type [so single ones - ones that you can't add twice - go to the top]
2. ID of activity
3. room / day
and so on
This could also be done for activities. If I add two activities for the
same subject, why do I need to have one at the bottom (id 200) and the
other at the top (id 5)?
BTW, I haven't used the menu once since I got this new version. I like
the basic concept of the shortcuts. If the dialogs were not modal I'd be
opening all sorts of windows and working much faster. If I could HIDE
buttons selectively I'd even be able to get the secretaries to do the
schedule and save ALL my time.
60--------------------------------------------------------
From Frans:
I refer to the Data menu, space constraints and say students, set of home rooms and then add.
In this box I select the students and then the individual venues.
If I for example already defined an activity tag for Large rooms, I want to add the activity tag
instead of the individual venues.
Now that I think again I doubt if it will be possible, because FET has to make a distiction between
general activity tags and "room" activity tags as the room activity tags must also appear in the rooms
list so that it can be selected. How will FET know this.
61--------------------------------------------------------
From Volker Dirr:
an other useful feature is:
modifying in settings the default min days constraint (for add activity).
because we nearly always use 100%, not 95%.
modifing later all to 100% isn't the best, because there are a few
activities with min days = 0%.
62------------------------DONE-----------------------------
63------------------------DONE-----------------------------
64---------------------------------------------------------
From aliponte:
An activity tag can be assigned the property not to count the underlying activities.
Please consider also this flag to affect the constraints with "days". A pseudo activity should not increase the number of days (if it is the only
activity of a day). A pseudo activity should be "invisible" for all countings concerning constraints, and for countings concerning statistics (teachers, students, subjects).
65---------------------------------------------------------
From aliponte:
There are many suggestions from FET users to improve FET's UI. It will be nearly impossible to find a UI that meets everybody's needs, I know. But let me just present, what was confusing me for a while. Maybe I'm not the only one.
Dialog "Modify activity":
Changing the state of the check box "Active" does not change the active/passive state of all subactivities that belong to the same activity. It affects only the single subactivity that shows in the tab (= the one that has been highlighted bevor the dialog was opened). If I want to activate the whole activity I have to click through all of the tabs. (It took some time until I understood this.)
Since there are two dialogs, one for activities and one for subactivities the (novice) user does not expect the possibility of editing individual subactivity properties in the activities dialog (because individual activation and individual duration of subactivities can be chosen in the subactivities dialog).
By the way, is it really necessary to have two dialogs? I could imagine a check box "subactivity only" in a common dialog for both, activities and subactivities. This would make this comment obsolete.
66---------------------------------------------------------
From Chafik Graiguer and Pietro (see also items #145 and #248):
DONE since FET-5.41.0 - 2019-11-20 --> ... <-- DONE
-Min hours continuously with an activity tag
67---------------------------------------------------------
From Gert Veltink:
I would be very pleased, if in a future version it would be possible to specify the number of students for an activity as an extra column in the activities.csv.
Rationale: I mainly use FET for planning examinations. In this setting the number of calculated participants and actual participants differs significantly, because students have to repeat examinations or do not register for examinations.
68---------------------------------------------------------
From Mr Robo:
In the Time tab, Break button, leading to the dialog to set up break times... At the moment, I set up one break time constraint that has
morning breaks and lunch breaks combined.
If I set up two (one for break and one for lunch) and I could attach a label that would be displayed in the unavailable slots in the
finished timetable, such as 'Break' or 'Lunch', it would save me having to edit each Student, Teacher and Room timetable before they
can be printed, etc. It's quite manual at the moment because '-X-' is used throughout and I can't do a global search and replace.
Also suggested by S Chandrasekar, on forum:
It is important to display a text like "LUNCH INTERVAL" or "SHORT INTERVAL" or "ASSEMBLY" in the break slots rather than an
"-X-" symbol. Is it possible?
Also suggested by Nagendra, on forum:
You can consider including this in settings -> timetables -> "Mark break slots with custom text". Let the user decide, whether s/he wants
to use the default '-X-' or any custom text. Similarly for 'uniting' the cells.
69---------------------------------------------------------
From George Miliotis:
About the "Years", "Groups", "Subgroups" check boxes in add/modify activity and
modify subactivity dialogs:
I'd be more interested in FET actually remembering these settings
globally (not even per form) for each session, no need to actually store
to disk.
70---------------------------------------------------------
From Frans (on forum):
Frans:
I came across the following, it is possible that you know about this:
I generate a timetable with constraints such as minimum hours daily for a students set
Next from the data, students, groups or subgroup menu I deactivate all activities for one group. This group has the constraint minimum hours.
I generate again and then Fet- gives an error message and stops, namely you have too little activities to respect the constraint minimum hours ....
In other words I must go to minimum hours and delete the constraint. It is not deactivated automatically.
As said I do not know if it must be like this. Other constraints such as same starting time are automatically de-activated.
Liviu:
It is normal to be like that, because it is hard to take care of such constraints, and because you don't deactivate a students set, but a set of activities. The constraint min hours daily is for a students set, not for a set of activities.
Frans:
I understand what you say, but I am not talking about deactivating activities. In my case however I had to deactivate a complete studens set and this one can only do from the data menu. In other words everything for a students set must be deactivated.
Studens go out to work in private practice for a few months. During that period they are not on campus and everything must therefore be deactivated as another students set takes their place and must be scheduled.
If it was possible to deactivate everything only when one uses the data menu.
Liviu:
Yes, you are right in a way, but there are many problems which may appear if I do like you say, and the things are complicated.
For instance, user deactivates a students set's activities, then activates only one activity for this user. Or if there is an activity with more students sets, of which some are deactivated and some are activated. Or there might be a global constraint min hours daily for all students.
The perfect approach might be to add a flag to each teacher, subject, activity tag, students set -> active or not active.
It would be kind of tedious and difficult to change now, as it was not designed from the beginning.
71---------------------------------------------------------
From Jason (on guestbook):
Ask for new feature:
- Auto generated after allow user to manual adjust timetable (Drag and Drop in view timetable)
72---------------------------------------------------------
From Zsolt Udvari (on forum):
If I de-activity all activities of a whole year (student set), FET will not ignore "min hours daily" constraint.
So I've two suggestion immedi:
- when FET checks this (and similar) constraints, would tolerate this
- can deactivate the students set (and related activities, constraints, etc.)
73---------------------------DONE--------------------------
74---------------------------DONE--------------------------
75---------------------------------------------------------
From Chafik Graiguer (on forum):
Clone activities or constraints:
Is it possible to clone activities for one student set to another?
Last year, Year 1S had 3 student sets
Now Two new student sets have been added
Student sets from same year have same activities and of course same time constraints
So how it is possible to do an activities Clone from 1S03 to both 1S04 and 1S05 with or without assigned teachers ?
76---------------------------------------------------------
From Zsolt Udvari (on forum):
Default settings per subject:
Is there any chance to make it? In my school the all "English" subject is 4 per week (and there are more similar subjects). So it would be nice, when I don't should set these settings (activities per week, tags).
77---------------------------------------------------------
From Chafik Graiguer (on forum):
Save button on Activity Planing Window:
For users working with activity planning window, they will probably spend most of the time on it
But this window is lacking a save button, so users have to close it from time to time to get access to FET main window to save work
Can a save button be added to activity planning window?
78---------------------------------------------------------
From Chafik Graiguer (on forum):
About constraint min gaps between a set of activities:
Now, how about applying this contraint globally? I mean every activities with subject (or tag) Math sould be 2 hours apart from an activity with subject (or tag) Physics?
Entering all activities, one by one is tedious
How it is easy/possible to add: min gaps between a set of activites with a tag?
or better:
Min gaps between two subjects/tag
79---------------------------------------------------------
From Chafik Graiguer (on forum):
Filter for modify multiple constraints at once:
In the min days between activities window
there is an option for: Modify multiple constraints at once
Is it possible to add a standard filter: teacher, student set, subject, tag ?
So I can multi-change only those activities with a given subject or teacher... etc?
80---------------------------------------------------------
From Chafik Graiguer (on forum):
Filter teachers:
Students are easily filtered because they are grouped using years then groups
So at Students set not available time window, we can, for example, apply unvailability to only one year, thus affecting groups under that year
We can also apply unvailability to group, thus affecting subgroups under that group.
Unfortunately, teachers are treated either individually or totally (constraints for ALL teachers): ONE or ALL
Zsolt Udvari already wrote:
Quote:
It would be nice when can pair teachers with his/her subjects and can filter in the activity dialog.
So, what do I think? I'm teaching Math and Phisycs. So to my name can add these subjects and when I add a new activity and select Literature, my name will not shown, only those teachers who teaches Literature.
So it would be very practical, less time consuming, to treat teachers per groups based on
- Home subject
or
- any other artificial tag like :
-part_time_teachers,
- team teachers,
-..etc
81----------------------------DONE-------------------------
82-----PARTIALLY-DONE in FET-6.11.0 22 October 2023--------
From Valdo (on forum):
Conclusion: he has many teachers, and almost all should have max 2 gaps per week, with 2 exceptions, who may have more gaps. He
does not want to add manually that many constraints. So, he suggests that FET should add constraints for all teachers,
with a selected number of max gaps per week, and then the user can modify each one by hand.
(Suggested indirectly also by Julio González Gil, on the forum.)
Added on 2017-07-31, by Valdo, on the forum: He wanted to add teachers' max hours daily 4 for all teachers, with an exception to allow max 5 hours daily for
a single teacher. There were too many constraints to add.
Suggested also by utismetis, on the forum, on 2017-08-07.
Suggested also by Davide Cottignoli, on the forum, on 2017-08-18.
Suggested also by mercurialuser, on the forum, on 2017-09-05.
Suggested also by auriolar and Rodolfo Ribeiro Gomes, on the forum, on 2018-04-15 (they suggest to add exceptions to the general constraint).
Rodolfo Ribeiro Gomes: I don't think it needs to change the constraint names. Just add the 'exception' field.
Suggested also by pg788, on the forum, on 2018-07-02
Suggested also by satellite2, on the forum, on 19 December 2018 (https://lalescu.ro/liviu/fet/forum/index.php?topic=3996.0):
There are very useful time constraints for me concerning teachers (or students) such as "max days per week for a teacher (or for all teachers)".
I want to use this constraint for the majority of teachers but not all of them. We have some teachers that have to teach 5 days a week because their
course load is impossible for less days. I wonder whether there is a way to adapt this constraint like "max days per week for the selected teachers"
or "max days per week except these teachers" instead of entering all of the teachers one by one. Is this difficult to implement? (Because there are
lots of teachers in the university).
Suggested also by Zafar Allah Askar (on forum), on 26 October 2019 (https://lalescu.ro/liviu/fet/forum/index.php?topic=4313.0):
Create lists of teachers to be added to a constraint.
Suggested also by nouvakis, mbarsan, and pgsrihr, here: https://lalescu.ro/liviu/fet/forum/index.php?topic=1110.msg28848#msg28848
See also TODO items #84, #455, and #476.
83---------------------------------------------------------
From Massimo Mancini:
1. Constraint not available time slots for a teacher
2. I put a name in filter and I see there's any constraint of this kind on
that teacher
3. Then I press Add. I expect the teacher field filled with the name I used in
filter... but currently FET propose always the first teacher in list.
84-----PARTIALLY-DONE in FET-6.11.0 22 October 2023--------
From Massimo Mancini and Chafik Graiguer:
Consider this:
1. the max num of hours for day is 5 for ALL teachers, the max num for teacher X is 3: this
works
2. the max num of hours for day is 4 for ALL teachers, the max num for teacher X is 5: this
NOT works as expected. FET simply refuse the exception. The exception does
not override the global in any case.
I remember we discussed this "strange" logic (imho an exception is an
exception and always override a global condition) last year, it seems that
the workaround is to manage this scenario using only individual constraints
(isn't it?), very tedious. If so I suggest a button in the form of global
constraint to automatically generate all the individual constraints one
needs.
From Chafik Graiguer (same subject):
My suggestion was not only about adding a teacher one by one
It is about get rid of double menu entries
For example, for Teachers and students, and for every constaint, FET has double entry like this:
-Max days per week for a teacher
-Max days per week for all teachers
-Min days per week for a teacher
-Main days per week for all teachers
...etc
My idea is to make a single entry for any constraint like this :
-Max days per week for teacher (s)
-Min days per week for teacher (s)
This has another advantage:
user will be presented by a window like described in my screenshot, where he can press Add all button
Now suppose, like user X, that I have 50 teachers or 50 student sets
I can easily add them all into Min days per week =5
then on the right pan double click on 5 teachers to deselect them before clicking Add constraint
Then add another Min days per week =3 for those 5 teachers !!
If we have tags for teachers (and rooms) it will even more easier
This concept is already used in FET in two places:
- Set all available, set all not available
- subject has a set of prefered rooms
See also TODO items #82, #455, and #476.
85---------------------------------------------------------
From Massimo Mancini:
Consider the form that lists the constraint "teacher non available":
change the line format from DESC CONSTRAINT + TEACHER'S NAME to
TEACHER+CONSTRAINT or, better, codify description of constraint using some string of
fixed size like so:
HTNA - NAME .....
I know the problem of translation (you may omit the description at all, it is
useful only when you display ALL constraints), but I think that a code is less boring
than a long and incomplete description repeated at beginning of all lines.
86---------------------------------------------------------
From Andres Chandia (on forum):
Is there a way to tag teachers, for different purposes like, a group of teachers can only work in the morning, or an activity can only be given by a
teacher of certain group, etc.
87---------------------------------------------------------
From Massimo Mancini:
a problem that we discussed in the past is about the description of
constraints (specially in the list of constraints or in the list of
conflicts): they are too long.
You must well understand that the unlucky timetable maker need to see the
troubles at a glance: reading long sentences with absolutely redundant
parts is very difficult and time consuming.
This is a problem in English but the solution can be achieved also and only in
translations... (a buon intenditor...;-)
So in the following you will find an example of that I think is a good list.
Of course is only my opinion. But, trust me, is a useful one
----- NOW --------------------------------------------------
Conflitti lievi totali: 13.7
Elenco dei conflitti leggeri (in ordine decrescente):
Vincolo di tempo infranto Numero minimo di giorni tra attività: l'attività con id= 290 (I:PANS, M:FRA, S:AMM_1 B) è in conflitto con l'attività con id= 289 (I:PANS, M:FRA, S:AMM_1 B), essendo 1 giorni troppo vicine, nei giorni Martedì e Martedì, incremento dei conflitti= 0.99. Le attività sono collocate consecutive nell'orario, perchè hai scelto questa opzione nel caso che esse capitassero nello stesso giorno
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante DIRU il giorno Mercoledì durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante GADO il giorno Sabato durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante MALG il giorno Sabato durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante MESS il giorno Sabato durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante OSIO il giorno Lunedì durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante POLE il giorno Venerdì durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante PULI il giorno Mercoledì durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante RAPE il giorno Sabato durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo numero massimo 4 ore consecutive infranto per l'insegnante xAZ1 il giorno Sabato durata=5. Questo incrementa la conflittualità di 0.99
Vincolo di tempo infranto Numero minimo di giorni tra attività: l'attività con id= 416 (I:LUCH, M:DIR, S:IGE_2 C) è in conflitto con l'attività con id= 415 (I:LUCH, M:DIR, S:IGE_2 C), essendo 1 giorni troppo vicine, nei giorni Sabato e Sabato, incremento dei conflitti= 0.95. Le attività sono collocate consecutive nell'orario, perchè hai scelto questa opzione nel caso che esse capitassero nello stesso giorno
Vincolo di tempo infranto Numero minimo di giorni tra attività: l'attività con id= 521 (I:LUZZ, M:EAZ, S:IGE_5 A) è in conflitto con l'attività con id= 517 (I:LUZZ, M:EAZ, S:IGE_5 A), essendo 1 giorni troppo vicine, nei giorni Martedì e Martedì, incremento dei conflitti= 0.95. Le attività sono collocate consecutive nell'orario, perchè hai scelto questa opzione nel caso che esse capitassero nello stesso giorno
Vincolo di tempo infranto Numero minimo di giorni tra attività: l'attività con id= 617 (I:xAZ2, M:EAZ, S:IGE_3 B) è in conflitto con l'attività con id= 615 (I:xAZ2, M:EAZ, S:IGE_3 B), essendo 1 giorni troppo vicine, nei giorni Sabato e Sabato, incremento dei conflitti= 0.95. Le attività sono collocate consecutive nell'orario, perchè hai scelto questa opzione nel caso che esse capitassero nello stesso giorno
Vincolo di tempo infranto Numero minimo di giorni tra attività: l'attività con id= 718 (I:CARU, M:COS_DIS, S:GEO_3 A) è in conflitto con l'attività con id= 715 (I:CARU, M:COS_DIS, ChA:info4, S:GEO_3 A), essendo 1 giorni troppo vicine, nei giorni Sabato e Sabato, incremento dei conflitti= 0.95. Le attività sono collocate consecutive nell'orario, perchè hai scelto questa opzione nel caso che esse capitassero nello stesso giorno
----TOMORROW I HOPE ()IMHO)-------------------------------------------------
Conflitti lievi totali: 13.7
Elenco dei conflitti leggeri (in ordine decrescente):
VT: Num.min.gg, tra attiv.: AttID= 290 (I:PANS, M:FRA, S:AMM_1 B) vs. AttID= 289 (I:PANS, M:FRA, S:AMM_1 B): +1 Mar -Mar : +0.99
VT: Num.max. 4 h consec. : DIRU : Mer : 5 : +0.99
VT: Num.max. 4 h consec. : GADO : Sab : 5 : +0.99
VT: Num.max. 4 h consec. : MALG : Sab : 5 : +0.99
VT: Num.max. 4 h consec. : MESS : Sab : 5 : +0.99
VT: Num.max. 4 h consec. : OSIO : Lun : 5 : +0.99
VT: Num.max. 4 h consec. : POLE : Ven : 5 : +0.99
VT: Num.max. 4 h consec. : PULI : Mer : 5 : +0.99
VT: Num.max. 4 h consec. : RAPE : Sab : 5 : +0.99
VT: Num.max. 4 h consec. : xAZ1 : Sab : 5 : +0.99
VT: Num.min.gg, tra attiv.: id.416 (I:LUCH, M:DIR, S:IGE_2 C) / id.415 (I:LUCH, M:DIR, S:IGE_2 C): +1 Sab-Sab : +0.95
VT: Num.min.gg, tra attiv.: id.521 (I:LUZZ, M:EAZ, S:IGE_5 A) / id.517 (I:LUZZ, M:EAZ, S:IGE_5 A): +1 Mar-Mar : +0.95
VT: Num.min.gg, tra attiv.: id.617 (I:xAZ2, M:EAZ, S:IGE_3 B) / id.615 (I:xAZ2, M:EAZ, S:IGE_3 B): +1 Sab-Sab : +0.95
VT: Num.min.gg, tra attiv.: id.718 (I:CARU, M:COS_DIS, S:GEO_3 A) / id.715 (I:CARU, M:COS_DIS, ChA:info4, S:GEO_3 A): +1 Sab-Sab : +0.95
88---------------------------------------------------------
From Volker Dirr:
Liviu, 2024-01-21: Maybe partially done a long time ago, with the setting "Show subgroups in combo boxes".
students set max gaps per week
and
students set begins early
need a filter/checkbox show only O year O group O subgroup
because there are so many students (subgroups) and it is useful to add
that counstraints for lower years. but the list is so long, so it is very
difficult to find the years.
that filter is also useful for students set not available.
89---------------------------------------------------------
From Paolo (on forum):
Well, for me it would be very very (very) important thinking over the constraints while fet is working.
So i ask, kindly, if it is possible getting a print function of all constraints (at least of time constraints).
Liviu: A temporary solution would be to open two FET programs simultaneously.
90---------------------------------------------------------
From daviodan:
Possibility to edit the timetable after generation, drag-drop of activities.
91---------------------------------------------------------
From Yush Yuen:
Sometimes we have 3 teachers available to teach the same "kind" of
class. For example, Teacher A, B C may teach either one of Math for
7A, 7B, and 7C. It is possible that one combination may yield a
timetable that is easier than another. So, it would be nice if we can
have an option to generate "alternative" scenarios with the different
combination.
A possible way to do that may be:
- adding a "teachers-activities pool" dialogue.
- activities of the same pool may swap teacher
- each pool may be enabled or disabled at timetable generating time
(you may not need all combination all the time)
- all generation time, make an option for "generating alternatives"
and save each alternative in a different folder or something
Or:
- activities are created without teachers
- adding a "teacher can teach: activity tag" dialogue
- at generation time, teachers are assigned to activities based on
which teacher has the right "teacher can teach tag"
Or, another way of doing this (perhaps a more elegant way) is to make
a "preferred teacher" constraint like the preferred room constraint.
However, also add an "same room/teacher" option. That is, room/teacher
may be selected from list of preferred rooms/teachers, however, the
same room/teachers must be assigned to the same activities.
92---------------------------------------------------------
From Silver (on forum):
Constraint "Min gaps between activities in the day for teacher".
I mean like this :
when I select Min gaps = 2
Saturday: activity - gap - gap - activity - gap - gap - activity
93---------------------------------------------------------
From George Miliotis (on forum):
I think the ability to renumber the IDs of the activities starting from a specific ID would be very useful in other XML-related work, too.
An advanced option: "renumber activities" with a dialog asking for "new lowest ID" would be ideal for these merge-split issues.
In this case we could renumber the first FET file from 1, the second from 1000, then copy paste directly into the XML file.
This would get all rules and activities, wouldn't it?
But maybe we could use XSL for this.
94---------------------------------------------------------
From aang (on forum):
I have a problem though in the formatting of the html files and consequently the printing. Now, an activity will be printed with six subgroups on the timetable
making it unusually wide (or tall) and the subgroup names do not actually reflect the student set that should be displayed e.g Mwaniki-CRE-4 E BIOCRE1, 4 E PHYCRE1,
4 W BIOCRE1, 4 W PHYCRE1, 4 N BIOCRE1, 4 N PHYCRE1, 4 S BIOCRE1, 4 S PHYCRE1
instead of Mwaniki-CRE-4 CRE1 or Mwaniki-CRE-4. This means i edit the timetable manually after every generation to make this changes. I suggest adding a displayname
tag to the activity which defaults to the current display name (without the activityID) and using this to determine what is displayed for the activity.
Another thing, for activities with same starting time, is it possible to have them in one column/row so that the number of rows/columns is fixed to the either the number
of days or lessons (depending on the selected timetable)? This way it is easier to print.
95--------------------------DONE---------------------------
96--------------------------DONE---------------------------
97--------------------------DONE---------------------------
98--------------------------DONE---------------------------
99--------------------------DONE---------------------------
100---------------------------------------------------------
From Chafik Graiguer (on forum):
I spent much time striving to solve an impossible timetable
I wonder if FET can automatically report it impossible then abort
-First case: a teacher having only 5 hours per week: 1+1+1+2 (Min days between activities=1)
With Min hours per day for teachers = 2
This lead for an impossible timetable, but FET desperately trying to solve it for hours and hours
-Second case:
A teacher has 15 hours
With a maximum of 4 hours per day, given a 6 days week, this would allow him 1 free day or even 2 free days (4+4+4+4)
But activities were split in a rather strange fashion
Group G1: 3+3
Group G2: 2+2+2+3 (Min days between activities = 1)
Activities from G1 alone would occupy him for 2 days
Then come activities form G2 which require additional 4 days
Total is 6 days !!
I set Max days per week = 5
This leads to yet another impossible timetable
My question: can FET automatically report it impossible then abort?
101---------------------------------------------------------
From drew:
Actually the biggest problem was with teacher T1, who was mistakenly scheduled for 7 activities with activity AT1. But, there are only 6 timeslots available for AT1. FET needs a way to detect and report on this kind of error. This is not the first time I made that kind of mistake.
After I deactivated activity id 1, a problem with teacher T2's not available times. Instead of marking him not available for the first two AT1 time slots on Saturday afternoon. After I relaxed it to him just being not available for the 1st time slot FET was able to create a schedule.
I'm not sure how you in on T2's not available time slot as the cause of the problem. I think you need to try to find a way to automate that process and generate warnings about which constraints need to be relaxed.
The problem with activity id 2 was a variation on this problem. T2 had 5 activities for tag AT1, AT1 has 6 preferred time slots, but T2 was unavailable for 2 of them.
You do similar checking for student groups which have too many activities for the available time slots.
102---------------------------------------------------------
From Christian Kemmer:
I have another suggestion which would make things easier for me.
When defining time constraints for activities, I can choose a group of students, let's say "year 05". But no activity belongs to this group, because all activities belong to subgroups of that group, let's say "class 05A" or "class 05B". So choosing a group in those dialogs has no effect for me.
What I really want to do is to define constraints for some activities that all belong to subgroups of a special group, for example all lessons in a certain subject of all classes in "year 05". I cannot use the "choose group"-combo-box at the moment, but I have to use the "subject" or "teacher" combo-boxes. If I use subject, I also get a lot of activities from other years, if I use teacher, I also get those other activities, and I have to change the teacher for each activity I am searching for.
My suggestion is that there is a checkbox "show subgroups of group" with the following effect:
If I choose a group and activate that checkbox, all subgroups of that group are also shown.
So if I choose "year 05" and subject "physics", all activities with subject "physics" in all subgroups like "class 05A", "class 05B", ... of group "year 05" are shown.
If I only choose the group and activate that checkbox while leaving the other comboboxes blank, all activities of all subgroups of that group are shown.
103---------------------------------------------------------
From Silver (on forum):
He needs a constraint to ensure that all activities of each teacher are hosted in different rooms (for exam scheduling).
104---------------------------------------------------------
From Davide G. M. Salvetti (on forum):
Would it be possible to sort on comments the activities list (like sorting the constraints)?
105---------------------------------------------------------
From Davide G. M. Salvetti (on forum):
I wonder if it's sensible to write a .fet file with all placed activities time and space constraints spelled out (i.e., just like the usual
_data_and_timetable.fet, where each activity is (non permanently) blocked in time and space) even when FET gets interrupted, rather than only
if it completes succesfully. I think it could be useful, because that file could then be reused as a start, maybe manually deleting or adding
some constraint.
106---------------------------------------------------------
From Silver (on forum):
He needs "teachers_rooms.html" in the statistics folder, he thinks it would be useful for the examination timetable.
107-partially DONE in FET-6.8.0, then finally DONE in FET-6.11.0, released on 25 October 2023-
108---------------------------------------------------------
From skinkone (on forum):
What I realized is that FET won't allocate your students for you, so I will do that by hand. I can only suspect that such a problem increases the
complexity exponentially. However, if you are thinking of going down this road in future developments, I would vote in favor of having such a
feature where students can have "tag preferences". The user would set "minimum or maximum number of tags a student group must have". This would
then be an optimization problem to try to get the most students with their preferences. Essentially FET would form student groups as an output
rather than as an input.
109---------------------------------------------------------
From Jonathan Block (on forum):
It would be nice to have a fourth dimension.
Explanation from Liviu Lalescu: He considers students (1), teachers (2) and rooms (3) as three dimensions. He would like to allocate activities
to teachers (4) (and these teachers should be the fourth dimension, different in concept from the second dimension, but similar to the third dimension).
110-------------------------DONE----------------------------
111-------DONE since FET-5.35.0-(21 December 2017)----------
112---------------------------------------------------------
From murad:
Create please, in QComboBox, auto-complete. With a large number of students and teachers it is very difficult to find the necessary students or teachers.
113---------------------------------------------------------
From kdrosos:
In FET there is "School's name", where the school's name appears in the final .html files.
Maybe the text "School's name" can be parametric and thus to allow changing to "Department's name" or "Institution's name" etc.
This can also allow a "School's name field" as:
"Faculty of FET: Department of FET"
Liviu Lalescu's note: I think that kdrosos refers to the Greek FET. In the English FET, the string is "Institution name".
114-------DONE since FET-5.40.0-(20 September 2019)--------
115---------------------------------------------------------
From nouvakis:
I've seen that with html files you save a "xyz_data_and_timetable.fet" file.
In this xml file, you save
<Time_Constraints_List> element which contains many <ConstraintActivityPreferredStartingTime>.
These <ConstraintActivityPreferredStartingTime> elements are the generated timetable data (Activity_Id, Preferred_Day, Preferred_Hour).
So, you could add an option (for example autosave) saving each generated timetable with a unique name (for example name_year_month_day_hour_minute.fet)
This file could easily be loaded from a user just to be able to preview the generated timetable inside FET.
116---------------------------------------------------------
From nouvakis:
I would like to suggest an extra optional field to entities of FET program.
For example:
Teachers_List: name, [id]
Students_List: name, [id]
Subjects_List: name, [id]
Hours_List: Name, [id]
Days_List: Name, [id]
etc
When someone (like me) would like to import FET generated timetable data to another program,
there should be a more accurate way to associate an FET entity with my database records beside the name ...
If you add the id field (as an optional field) there should be no problem to users already using FET ...
117---------------------------------------------------------
From mma:
When adding a constraint, a useful feature would be to check if an identical constraint exists already, and thus not adding the constraint. I just tried to add the same constraint repeatedly (just kept pressing 'Add'), and it kept adding. When there are many constraints it can be difficult to keep track of them all.
Removing identical constraints reduces the clutter, and perhaps also speeds up the timetable generation?
118------------------------DONE-----------------------------
119---------------------------------------------------------
From Yush Yuen:
For printing: It would nice if I can specify a custom css file for the style.
120---------------------------------------------------------
From Yush Yuen:
I find that while the fixed max-room contraint works well, I notice
something with my situation:
I have a teacher, teacher A, uses room A and teaches year 6 classes. Unlike
the more senior years, which are heavily blocked (lots of constraints with
activities with same start time), year 6 classes are pretty free floating.
Therefore, the year 6 classes always appear at the end of the order of
allocation.
I have included room A as one of the available rooms for the preferred room
list for another teacher. room A is almost always chosen. But the problem
is, teacher A and room A become very difficult toward the end of the
allocation. My timetable has about 1280 activities, and most of the year 6
classes are toward the end of the list. The generation always got stuck
toward the end, like 1250, with teacher A not being able to get the right
allocation.
I don't think this is a bug. This is easily solved by removing room A from
the preferredRooms list for that other teacher. But I just want to point
that out to you.
Answer Liviu Lalescu:
I could improve the algorithm to take care of situations like that. So
it will know that in room A there can be only one type of activity
(one type of look-ahead). Or that in room A there can be only teacher A
(another type of look-ahead). But there are contrary reasons:
1) Will make other timetables slower, by the additional look-ahead.
2) Each look-ahead is to be avoided, because of possible new critical
bugs and general slowdown. There are many look-aheads in FET, but they
are necessary and not very time-consuming.
3) The user is advised to help FET towards a solution. The user needs
to collaborate with FET. (Of course, not necessarily us. We want to
push its limits )
4) This is the most important reason. Say I solve this problem for a
single preferred room for teacher A. But this is not everything. A user
may invent two preferred rooms for teacher A and go into the same
situation, which now becomes more complicated to manage. I cannot
forecast all situations similar to yours.
Please tell me what you think, I might need to treat situation like
these - I am still thinking. Because I did many look-aheads which are
necessary.
121---------------------------------------------------------
From Andres Chandia:
He has a custom version, developed by Liviu Lalescu, which among other things
ensures that if more people open the same file (on a common server), only the first
one who opened it will be able to save it, and the others will see that their file
is read-only. He suggests to add this into official FET. But it might be tricky and
potential bugs might be critical.
122---------------------------------------------------------
From Robert Sutcliffe:
I need to print out all the rules and constraints to document the settings to supply to another system, and for peer review.
Staff availability, activities, room allocation rules, not-overlapping activity selections - everything!
Is there any way to do this?
---Answer Liviu Lalescu: no, there is no direct way in FET---
If not, another web report that details all these settings would be ideal.
Liviu Lalescu, 2024-04-05: You could use this trick: select all the activities/constraints, click Remove (but don't remove), and select the text
in the confirmation text. This is a nice formatted text.
123---------------------------------------------------------
From Zsolt Udvari:
I think the following feature would be nice: when I deactivate a year FET should deactivate some time constraints, e.g. min hours daily for a student set.
When I deactivate a year and I want to generate timetable, FET says that some groups don't have enough activities to respect this constraint.
And when I activate a whole year these constraints will again be activated.
Answer Liviu Lalescu:
The best would be other buttons: "Activate/deactivate all constraints for selected students year" and so on, for groups, teachers, etc.
Because the button says "Activate/deactivate all activities for selected students year" (it refers only to activities).
124---------------------------------------------------------
From rjmillett (on guestbook):
there are many things i would like to have in FET:
1. when adding activities there should be a choice list similar to the new print option now included in 5.18
to add multiple classes (sub-groups) with the same choice of periods and teacher in one click i.e. all same
2. there should be a similar option in the preview to choose a class and teacher preview both at the same time so as to make changes without having to go back and every time i.e. side by side view at one time click in drop down box
3. to right click in the preview and change the position ot LT or PLT activities and not having to go back every time to time > all > search > etc to make changes
4. print preview choice button on main panel
5. un/lock button on main panel
6. an import and export to EXCEL or txt other than CSV file
7. print option of teachers statistics on preview not from HTML
In addition to (6.), when Liviu said that Excel was not free software, rjmillett replied:
Another option would be to export as a Google sheet that's open source and
free for all other than Microsoft's excel
125---------------------------------------------------------
From Volker Dirr and Bobby Wise:
Bobby:
1) I have a situation where a school has 3 Grade 11 classes. 11a, 11b and 11c.
All the classes have compulsory subjects: 7 Periods of English, 7 periods of
second language (Afrikaans, French and German) and 8 periods of Mathematics.
Then each student must select 1 subject from each of the combinations below:
Combination 1 (6 Periods)
Accounting
Biology
History
Science
Combination 2 (6 Periods)
Art
Biology
Economics
Science
Combination 3 (6 Periods)
Art
Biology
Geography
Science
They also have 2 remaining subjects of 1 period each Life Skills and
Religious Instruction.
They have a 7 day cycle and 6 periods in each day.
Could you please recommend a manner in which I should split the classes in
order to make it possible for all the subject choices?
2) Thanks Liviu, Volker did help so I have sorted out the problem.
What I also discussed with Volker was the possibility of a forth category
split. I know it will slow down the generation but for me that is not too
much of a problem. I suggested that perhaps in the Settings Parameters you
should put an option so the user can decide if they would like a 4th
category or not. Then obviously they should realize if they do select the
option that the generation process will be much slower.
Volker:
i had several talkings about the number of categories now again.
what do you think about the following suggestion:
add in the settings a integer "max number of subgroups for split year
automaticly".
by that idea it is much much flexible in the number of categories and
the number of splits per category.
so you can increase/change as long as you are not over that limit.
the current limit is 12*6*6=432.
i think setting the limit to 500 is ok.
we maybe also allow the user to increase that limit a bit more, but of
course only with the warning that it will be slow, produce large html
files and doesn't make sence if it is (much) greater then "real"
students per year.
126---------------------------------------------------------
From Volker Dirr:
1)
>> i just want to tell you this and ask you if we maybe need that also
>> in FET.
>>
>> i am currently coding on an other small tool.
>>
>> i saved settings with QSettings and i reload that settings on an other
>> function.
>> the strange thing was this:
>> i saved QSettings in the destructor ~xyz and reload it in an other
>> function/file again, but it look like Qsettings didn't save. the
>> strange things was that visible/correct as soon as i restarted that
>> reload function a bit later.
>> first of all i tried a QSettings.sync(), but it doesn't help.
>> i also tried with a global variable, but it also doen't help.
>> it look like my "update"-function already run before the destructor
>> source was done.
>>
>> now i removed the destructor ~xyz and replaced it by a protected: void
>> closeEvent(QCloseEvent *event);
>>
>> now all work fine. it look like the protected: void
>> closeEvent(QCloseEvent *event); wait long enough.
>>
>> so a destructor run simultaneously? so it is critical to use
>> destructors with qt, because they might be to slow? (for example if
>> you clear variables, reload variables or something like that.)
2)
i am not sure if it is a problem.
it was more an information to you.
i was able to proove that the destructor is doing his job, but to slow. the
destructor isn't ready if the function go back to the main programm.
if i add a delay in the main programm and check if the destructor have
done his work, then it is ok. but without that delay it isn't ok. so
destructor is slow (i guess it simply run in a second thread
simultaniously).
so the solution is:
a) adding a delay in main code. (but that is a bad style, especialy because
i don't know how long it must be)
b) coding it with an closeEvent. (like in qt book). i coded it with
closeEvent and it run very fine now.
i just didn't check if this is maybe also critical for fet. that is why i
just want to warn you, because it took several hours to find this bug.
Liviu:
I think I understood.
You are right: "The readSettings() and writeSettings() functions must
be called from the main window's constructor and close event handler as
follows:" (from http://qt-project.org/doc/qt-4.8/qsettings.html#details)
I wanted to say: "For efficiency, the changes may not be saved to
permanent storage immediately. (You can always call sync() to commit
your changes.)", but looks like you already checked that.
I think that if the control goes to user interface (like waiting for
user to click), the critical time is gone. So, I hope your situation
will not appear.
I really cannot do all perfectly with closeEvent. There are too many
files. Maybe in the future.
127---------------------------------------------------------
From Volker Dirr:
Lift the limits for the generation algorithm, like MAX_TEACHERS and
MAX_TOTAL_SUBGROUPS.
128---------------------------------------------------------
From yasin dehghan:
1- show warning message when enter 2 same activity
2- add exam date with subject in subject form
3- add list for teacher to show allow subject for each teacher in teacher form
Liviu Lalescu:
I will add your suggestions in the TODO, but please explain to us more
detailed:
1 - When the user adds two same SPLIT activities?
2 - I do not understand.
3 - I think you mean each teacher has his own subjects list?
yasin dehghan:
1- no, don't split. when the user add 2 same activity show warning msg and
don't save 2nd activity
2- user able to add date of exam for each subject and print exam date with
subject name, just it, no exam planing and etc
3- yes, user able select list of allow subject for teacher, when add
activity, only allow subject show for teacher or show warning msg if select
don't allow subject
and other sugestion
4- user able enter min and max hour of each teacher per week and show this
min and max hour in teacher statistics for compare
129---------------------------------------------------------
From Volker Dirr:
do following speed check:
check all connections of radio buttons.
check if they use singnal toggled.
if you can see 2 times the same slot, then it is bad to use toggled.
example:
this is bad:
connect(radioButton1, SIGNAL(toggled(bool)), this, SLOT(something(bool)));
connect(radioButton2, SIGNAL(toggled(bool)), this, SLOT(something(bool)));
this is ok:
connect(radioButton1, SIGNAL(toggled(bool)), this, SLOT(something1(bool)));
connect(radioButton2, SIGNAL(toggled(bool)), this, SLOT(something2(bool)));
if you can find a bad version, then it should be converted into this:
connect(radioButton1, SIGNAL(clicked(bool)), this, SLOT(something(bool)));
connect(radioButton2, SIGNAL(clicked(bool)), this, SLOT(something(bool)));
reason:
if you click a button in bad example, then something is called twice!
(once, because one RB is checked and a second time, because the other RB
is unchecked).
if you use click, then something is called only once.
130---------------------------------------------------------
From Daniel (on forum: https://lalescu.ro/liviu/fet/forum/index.php?topic=1224.0):
Allow activities to span over breaks. (For the moment, a solution is to split activities
and add constraints two (or three) activities grouped. Another solution is to not
consider explicitly the breaks in the timetable, but this way the constraints of
type max hours continuously may not work as needed.)
131---------------------------------------------------------
From daviodan:
After clicking 'Add' in the add activity dialog, he suggests that the students list
widget should be cleared, because usually the user adds activities for a specific
teacher (with all his students), then goes to another teacher.
132---------------------------------------------------------
From Massimo Mancini:
Display the total number of hours of an activity: when I divide an activity
I would see the total of durations of all defined subactivities.
This total must be updated changing the number/duration of subactivities.
A good place for this changing label could be near number of sub in
group *divide*:
In my mind (Italian one) I know that a teacher have 6 hours of a subject,
only then I think about how divide them.
See the total expedite and reduce input errors.
---
comment by Liviu Lalescu:
I added this in the TODO. But there is so little space in the dialog there.
---
comment by Massimo Mancini:
I think the space is pretty enough. There are two suitable places:
1. at the side of the field *divide* (too long, what is the max number of
subactivities? 9, 99, 999?)
2. below the check *consecutive*
the format of the label can be as little as T:xyz (5 chars).
Just this afternoon I spent 2 hours correcting mistakes that I would have
avoided if such counter was in place. Consider the input of a sequence of activities with
similar number of subactivities but different duration of some sub, consider also that the
tab widget remember the past durations when you reduce and then re
increases the number of subs... so. it's easy (too easy) to insert a wrong total
duration, for a real check you must tab all the subs and add: very boring.
133---------------------------------------------------------
From Massimo Mancini:
First, consider this situation...
1. I'm working on teachers not available (TNA) constraint
2. I filter on MANC, fet shows a blank window: the constraint on MANC not
exist.
3. Good. I add it but the dialog not inherit MANC as selected teacher :-(
why? In general the dialog add/modify is not linked with existing constraints. Fet
prevents, of course, multiple TNA about the same teacher, but I ask you, is it
possible to link the dialog with existing data? in this manner the
add/modify functions would be the same. With the wheel of the mouse I can
scroll the list of teachers and quick view/modify the existing constraint!
Second, the comment area. I use it to note some info about the
contents of fet file. I would like to access the comment
space more quickly. My suggestion is "reduce the RECENT button and put near
a COMMENT button"
NEW OPEN
RECENT COMMENT
SAVE AS
good! isn'it? ;-)
The best would be if you could show the first line of the comments along with
the file name in the recents list... so I would avoid to remember...
134---------------------------------------------------------
From Pietro (on forum):
I think would be nice we could enable/disable constraints even in the filtered masks
(ex: "constraints teacher not available times" mask), and not only in the "all time
constraints" mask. The "comments" button would be very useful too.
135---------------------------------------------------------
From Pietro (on forum):
I would suggest one more feature:
it would be very useful to have shortcuts with "ALT or CTRL + key" for the buttons in the various masks all over the FET.
So we could for example enable, disable or delete the various constraints without have to use the mouse, only the keyboard.
136---------------------------------------------------------
From arivasm (on forum):
I think it would be good if the activities dialog would be actualized every
time you enter a new one. That could allow to verify the last entered, and
prevent mistakes, without the need to close the new activity dialog.
137---------------------------------------------------------
From Pietro (on forum):
I think the "pseudo activities" shouldn't be shown in the teacher statistics, or
should be shown in a separate column. In fact, with actual situation the user can
confuse real activity with pseudo one and don't know the real situation.
138-------------------------DONE----------------------------
139---------------------------------------------------------
From Massimo Mancini:
Please consider to implement a shortcut (Alt+C ?) to popup the comment area...
140---------------------------------------------------------
From arivasm (on forum):
When you set the constraints of the times in which the teachers are not available,
maybe you don't know how many teachers wil be finally available for each time slot
(unless you count them manually). So, my suggestion is to include a new statistic
to show that information, in order to correct impossible constraints before start
the timetable generation. Of course, an automatic detection (less teachers
available than needed) would be better!.
Liviu Lalescu: Sorry, but I do not understand. I already do a check on the number
of activities for each teacher, versus his not available times.
Volker Dirr: Your suggestion isn't that easy as you might think now. It's easy if
teacher/students have full timetables (all timeslots are used), but it's complicated
if the tables are not full.
Liviu already include common checks like that. The checks also need to care about
timetables that are not full (not all timeslots are used). Maybe the checks can be
improved if the timetables are full, but that mean: a) you must code a check that
check if the timetables are full. b) it will help only a few datasets, because most
datasets (compare examples) don't have full timetables.
arivasm: Excuse me if my previous post wasn't clear!
Of course, Volker is right: it will be a weak information know how many teachers are
available for each time slot if the timetable isn't full. Furthermore, the fact to
have for each of all time slots more teachers than groups don't will guarantee that
the whole problem will be solvable. But if the timetable is full, and this condition
fails at some time slot, it will be certain that the problem will be impossible to solve.
The idea arose when I was entering the preferences of my workmates and I suspected that
too many of them were requesting be free at some times, i.e. last class of friday
(of course!). Then I missed to have a simple account as an alternative in order to avoid
passing sheet after sheet, looking for the petition and count them.
141---------------------------------------------------------
From AZ (on forum):
I would appreciate a statistical feature that tells the user which constraint(s) is (are)
causing the greatest number of rejects; if a user could see, during computation, a counter
that tells him the top 10 blocking constraints, maybe the debugging could be easier.
I don't know if it's possible, though.
Liviu Lalescu: Unfortunately, it is probably impossible or it would give wrong results.
But someone should study this suggestion, so I'm adding it in the TODO.
142---------------------------------------------------------
From Etlau (on forum):
Maximum delta in time for day per week per group. For example 7-7-3-4-5 is unacceptable,
better will be 5-5-5-5-6. And same for teacher. Yes, you can set max and min activities
per day, but number need to calculate manually for every class and teacher, not really
comfortable.
143---------------------------------------------------------
From Etlau (on forum):
Will be nice to drag-and-drop and lock activities in schedule directly.
144------------------------DONE-----------------------------
145------------DONE since FET-5.41.0 - 2019-11-20-----------
146---------------------------------------------------------
From Frans (on forum):
I just wonder how the following can be done.
Let's say I set a timetable for a specific term with constraints. The timetable is accepted by everyone and published.
What I do now for the next term is to export the information, I am interested in the activities, as csv files. These files are send to the people in charge to make changes for the second term for example. What I want to do now is to import the activity files using Fet to set the timetable for the specific term.
I do have a problem now. If I import the activities then I must add the constraints from scratch, hundreds of them.
If there are only one or two constraints and a few changes to the activities that is not a problem.
Is there not a way that the existing constraints can be inported withou entering them again. I know that I can save the timetable with data, including constraints, but this is of no help to me.
Is there a solution?
147---------------------------------------------------------
From y (on forum):
y: Teacher S has to leave early either on Thursday or Friday. This means that in one out of these two days he has to finish at the 4th hour the latest. How can I do that?
Liviu: Say slots are Thu 5,6,7 and Fri 5,6,7. Add occupy max 1 slot from selection for each pair, starting with selection Thu 5 + Fri 5, then Thu 5 + Fri 6, ..., Thu 7 + Fri 7 (3x3=9 constraints). Should work, right? Because you cannot have valid any pair of hours from different days.
y: Yes, I think it should work. I'll try this!
Thanks a lot!
Maybe, in a future version of FET, you could add an extension of the constraint "a teacher works in a hour interval max days per week", to allow to pick which days we want to apply this constraint, and not necessarily the whole week. It could be renamed to "a teacher works in a hour interval, max days from a days set" or something similar. Do you think something like this is feasible?
148---------------------------------------------------------
(DONE? Liviu Lalescu: in FET-6.17.0 (February 2024) we added the constraint teacher(s)/students (set) max building changes per (real) day in hourly interval. Is this item solved?)
From Christian Kemmer (on forum):
For the next timetable at our school, I need the following:
Hours 5 and 6 at one day have the same activity.
So I could decide by myself to add an activity 2+1+1 and give the subactivity with "2" hours a special activity-tag "2h" or something like that. I can do this for many activities and then only allow activities with tag "2h" to be placed in hour 5.
But if I do this, I have to decide, which activity should be placed there. If I choose too much activities, there will also be activities lasting two hours during other times of the day, which is not wanted in many cases.
I could also use constraint "consecutive if same day", but then an activity 1+1+1+1 may become 2+2. But I only want 2+1+1 or 1+1+1+1 for that kind of activities. I am also not sure, how to ensure that "consecutive if same day" is only used for hours 5 and 6.
So, what would be the best solution to let FET decide which activities to use, so that for every student and every teacher for every day I have the following:
If the student / the teachers has an activity in hour 5, he also has this activity in hour 6. Each activity may only have one two hour lesson (like 2, 2+1, 2+1+1, 2+1+1+1), but no activity is allowed to have more than one two hour lesson (like 2+2, 2+2+1).
I hope that I have explained it clearly.
Thanks for your help.
...
The reason is the following: Between 1st and 2nd hour there is a small break for students and teachers to change rooms. Between 3rd and 4th hour, there is also this small break. Between 5th and 6th hour, there is no break. So the teacher and the students must stay in the room without any break.
So I want to avoid those two hour lessons for all 1+1+1+1 and 1+1+1 and 1+1 activities if possible, but during 5th and 6th hour, I need them.
Liviu Lalescu: I think the best is a new constraint, students/teachers max building changes in a time interval, and each room is in a different building in your case.
149---------DONE in FET-6.12.0 on 3 November 2023-----------
150---------------------------------------------------------
From Nemo (on forum):
Issue is I am always having to make changes as teachers leave, swap etc. I of course have the timetable 'fixed' but it is quite laborious to make changes to rooms etc.
What it really needs now is a front end any one can use for room changes/teacher changes for a fixed timetable. I have plenty of programming experience (from a long time ago though) so using FET no issue for me. But even the ICT teachers can't understand it easily.
The other major issues we face is cover - would be fantastic to have a cover generator. That takes up a lot of time practically as teachers are off sick and the time taken to check their timetable and find others free is a job that would be nice at a click of a button. I know these are "nice to haves" but I bet a lot of FET users have the same practical issues day to day.
151---------------------------------------------------------
From Anton Anthofer (see also item #275):
- modify the IDs of (sub)activities.
- possibility to remove subactivities.
Liviu: DONE in FET-6.0.0?
- multicore generation for multiple timetables generation.
Also suggested by Thaneswer Patel, on forum:
Is it possible to edit a split option in activity once we entered the data in FET?
152---------------------------------------------------------
From yasin dehghan:
can you add excel export to software
this is so useful for view and share
153---------------------------------------------------------
From Leandro Bueno:
I have another question to you. If you open the file, you may have seen that the schedule of our school has 3 turns (morning, afternoon and evening),
but, the activity hours are of one clock hour for the evening and 50 minutes (clock) for the morning and afternoon turns. I can generate the timetable,
but the statistics only considers FET hours, but the FET hour to clock hour relationship is not defined. This relationship would help generate the work
hours of the teachers (in clock hours). Today, I take the statistics and make a spreadsheet applying the relationship between FET hours and clock hours.
I think that something like a relationship between FET and clock hours should be interesting to add in future versions, so the teachers statistics could
be shown in terms of number of activities (as it is today) and clock hours in a quick way, right from the FET interface.
154---------------------------------------------------------
From Leandro Bueno:
Always (or never) use span in the HTML timetables if an activity has
duration larger than 1.
155---------------------------------------------------------
From Leandro Bueno:
Another suggestion for a future release is the option to only
"print" to HTML the hours that the students have. In my case, I have
students divided in turns (morning, afternoon and evening) and each
turn only have activities in that specific turn. When I generate the
tables, the morning students' table have the afternoon and evening
hours as not available (there are restrictions for this in the .fet
file). The same occurs in the afternoon and evening students. I
suggest that these not available hours of the students don't end up
in the final HTML table.
Amendment by Volker Dirr:
Should be generalised from "hours" to "hours or days or both".
156---------------------------------------------------------
From Yush Yuen:
It would be cool if there could be an interactive way to do the timetable
generation. For example, in the middle of the generation, I can remove
some constraints on the fly, un-allocate allocated activities, move
activities in different order, ... etc. The work flow might be something
like this:
- hit the pause button
- select activities to be free
- inactivate any constraints
- move some activities to the front
- hit the re-start button
I suppose it will only benefit some crazy hard timetable like my school.
Even that, the timetable is probably plain impossible, but such interactive
approach would make it easier to remove key constraints that makes things
difficult.
157---------------------------------------------------------
From Yush Yuen:
Is it possible that FET could be
customized to do the following:
- Have most of the activities with preferred time and space initially
- but once being placed, it will be treated as if the time and space
allocated was not "preferred" so will be free to float
I am hoping that this way, I can obtain better solution by using a
completed version, unlock some year, then let the program to run again.
Liviu: I did such a custom version for Yush, but it turns out not to work
as needed, because of broken soft constraints.
158----DONE in FET-6.8.0 and FET-6.11.0 on 23 October 2023--
159--------------------------DONE---------------------------
160---------------------------------------------------------
From Volker Dirr:
get rid of some "unneeded" tags in the xml file.
"unneeded" means: they contain redundant data. this data can be used to
assert the dataset, but is unneeded.
for example:
<Number> in hours list, days list, ...
161---------------------------------------------------------
From Volker Dirr:
if fet can't generate the data ("Cannot generate - please modify your
data"), then the "view difficult activities" push button is disabled. So a
user can't search the bug. so a) enable the push button or (maybe even
better (but only if you use only 100% constraints?)), display the
difficult activities in that text edit with the "Cannot generate - please
modify your data" string.
162---------------------------------------------------------
From Volker Dirr:
generation_pre request: warn if activities has 100% same starting time and
100% preferred room in the same room.
163---------------------------------------------------------
From Volker Dirr:
do another check in generation_pre.cpp:
if an activity has only 100% one room possible (by one or more
constraints), then sum all hours of the same room and check if (number of
available time slots for room) >= (number of 100% needed slots for this
room by activities).
164---------------------------------------------------------
From Volker Dirr:
name of constraints isn't always the same:
fet has for example: "teacher not available times" constraint.
but it also has :"A set of activities has preferred times"
But are these times preferred? The opposite times are not available.
So this constraint should be called "A set of activities has not
allowed/available times".
maybe even the "activity prefferd time" is also bad, because it is not
only preffered. that is a 100% constraint. even the fet interface call it
"locked". So this constraint should be "An activity has a locked time".
so we get rid of all "preferred" stuff by that. (using instead only
"locked" or "not available").
165---------------------------------------------------------
From Volker Dirr:
if a constraint doesn't refer to an activity, then generating shouldn't
refuse generating. that constraint should be just skipped. Like inactive
things are skipped. it can warn, but not refuse generating.
(this is highly useful, because someone hunt bugs in his dataset, he can
just delete for example some years; just to check if this smaller stuff is
solveable, but some constraints might now refer to no activity anymore,
because the activities are deleted.)
166----------------------DONE-------------------------------
167---------------------------------------------------------
Liviu: maybe done in FET-6.9.4, constraint max hourly span between a set of activities?
From karim:
max gaps (hours) between a set of activities
Within :
time constraints -->activities
-min gaps (hours) between a set of activities
+max gaps (hours) between a set of activities
168---------------------------------------------------------
From Davide Cottignoli (on forum):
I would suggest a new simple constraint for teacher:
In Italy, the work contract for a teacher is often tethered to a specific number of workdays so, to achieve the desired result, is necessary to insert two constraint:
"Max days per week for a teacher" and "Min days per week for a teacher" that have to set the same value.
Why not add a "Number of workdays per week for a teacher"?
In the interface I am glad to see a button that add all teacher and set every single-type constraint to the same value so to be individually modified later.
169-------------------------DONE----------------------------
170---------------------------------------------------------
From agemagician (on forum):
1- Print the name of the year, group and class under the institute name.
2- Print the schedule from right to left rather than left to right "very useful for Arabic countries like our academy". - Qt bug (Liviu)
3- Make a bold line between each day in the printing and light line between periods.
4- Make a bold line between groups in the printing.
5- Change the font in the printing. -> DONE on 31 January 2022 in FET-6.2.7.
6- Export the schedule to excel.
171---------------------------------------------------------
From Vlăduț Frățiman:
He suggests to drop activities ids and use instead the teacher, students and subject, because ids might puzzle the new user.
Also, he suggests to add icons to the buttons.
172---------------------------------------------------------
From vlad2005 (on forum):
For gaps constraints (and others, maybe) specify the interval for which the constraint should action. Useful for instance
if the user wants teachers to have zero gaps in the morning and in the afternoon, but can have gaps in between these two
periods.
173---------------------------------------------------------
From Davide Cottignoli (on forum):
I don't know if comments constraint is a widely spread practice but when I add or modify a constraint I often use these, so add a "comments" button in these dialogs it would be greatly appreciated. Also ad enable/disable constraint button would be useful.
I often use comments to group same constraints but alphabetic sort and group by constraint-type, comments and insert order I think would be useful; could you add a preference dialog for these and others future settings?
174---------------------------------------------------------
From liquid (on forum):
I'd suggest to move print command from Timetable menu to File menu. IMHO, It's more common to have print command there than anywhere else. It may be worth to implement inside Print command some kind of radio button to choose what to print. Overall, it's good to have Print command anyway.
175---------------------------------------------------------
From mouiata (on forum) (regarding the custom Algeria version)
I suggest that the constraint is added under distinguishes between unloading the morning or evening, especially for a professor in the Algerian version of the program
The program is currently the constraint
a teacher works in an hourly interval max days per week
This is what allows unloading of several periods of morning and evening for the professor without distinguishing between the morning and evening.
In Algeria, a lot of professors in favor of unloading the evening than the morning
I propose to add the the constraint
The least possible number of evening periods that can be discharged to Professor
The least possible number of mornings that can be discharged to Professor
Liviu: Do you mean maximum number, not "least"?
mouiata: I mean, the minimum number if possible
If it is not possible The maximum number
176---------------------------------------------------------
From clouds (on forum):
Topic: teachers for hour
What do you think about a function that shows for each hour of the day how many teachers can be assigned at every hour (under the constraints set).
In this way it's possible to see what are the most problematic hours
177---------------------------------------------------------
From MarioMic (on forum):
When I create multiple timetables with fet, to eliminate the bad results (with a high number of conflicts), I have to manually select and
remove the folders of the bad timetables in the output path. This is especially annoying if I have many timetables since the names of the
folders do not show the level of conflict (it also would be useful to have this, too), and moreover occupy disk space unnecessarily.
It would be useful (for the gui and the command line version) to have an option to save only timetables below a configurable threshold of
maximum level of conflict.
Liviu Lalescu: since version 5.20.2 we added a detailed report for multiple generation of timetables.
178----------DONE in FET-6.10.0-17-October-2023-------------
179---------------------------------------------------------
From nouvakis (on forum):
Min hours per day, max hours per day:
I use these constraints but there is a problem.
If I set
min_hours = 3 and
max hours = 5
and a teacher should work 21 hours per week we could have combination: 5 + 5 + 5 + 3 + 3
but a better one should be: 5 + 5 + 4 + 4 + 3
So, I recommend a new constraint like "frequency of max hours per day"
For my example this new parameter would be 2 (5+5)
180------DONE since FET-7.0.4 - 19 February 2025------------
181------DONE since FET-5.21.0 - 3 December 2013------------
182---------------------------------------------------------
From Bobby Wise (on forum):
I think it would be a good idea if the printing of All Activities could be in consecutive order from the lowest grade to the highest, or in alphabetical order. Similar to the Activity Planning.
I think that the print order now is in Activity sequence.
183---------------------------------------------------------
From nouvakis (on forum):
The Min days between activities constraint has a weight percentage which I set to 95%.
I think that there should be another weight percentage for the option "if two activities are on the same day, make them consecutive" (when checked) because you handle it as a 100%.
184---------------------------------------------------------
From Tonny Chan:
Please add a multiple select and then add to FET, then I need not to click the students one by one to a course.
185------------------------DONE-----------------------------
186---------------------------------------------------------
From plaldw (on forum):
Max building changes in a time interval.
187---------------------------------------------------------
From llbuenoo (on forum):
I would like to generate a report that show the teachers and theirs restrictions (mainly the "Teachers not available times") and Activities related to the years (with its Groups and subgroups), in a way that I can better manage the distribution of the teachers activities according to their availability.
I have been making this by hand, but it generates a lot of work on each manual iteration on the timetable. As the data is stored on the FET database, it could be generated directly by the program.
I think in a pair of tables per year, one with the teachers and their activities in that year and another with the "teachers not available time" for that year.
With this table it could be simpler to redistribute Activities or teachers.
188---------------------------------------------------------
From Frans (on forum):
In the data and timetable fet file the sizes for subjects are indicated. Is it not possible when export to csv file to also export the group and/or subject sizes.
In some institutions the group and subject size are important in calculating workloads and ftes for lecturers.
The groups with the respective sizes are already exported but this is not always the same for all subjects as the number of students can be changed on the add activities page and this is not exported.
189--------------------------DONE---------------------------
190---------------------------------------------------------
From Volker Dirr:
most users use the split year automaticly feature only.
some need more categories, but that will produce to many subgroups.
so how about this feature:
a user can disable the "year-group-subgroup" fet and enable only a
"year-group" one.
so he can't modify, add, delete, ... subgroups anymore. subgroups will be
only used and gererated automaticly in the pregeneration and generation
part.
split year automaticly will look the same, but it won't produce subgroups.
instead of this it still store an integer number with the catagory number
to each group.
now only one new basic time constraint is needed:
(i will explain in 2 steps, but i think it can be imporved by storing that
value.)
if you place an activity into a timeslot, then:
1. step: it need to check if there is already an activity of the same year
stored.
no: -> place activity
yes: -> 2. step
2. step: check if that activities (same year) (in fact it need to check
only the first one, because others are already the same) have the same
category.
no: -> impossible to place activity
yes: -> place activity
i am not 100% sure, but i think with this kind of timetabling we can save
space and maybe also improve speed.
the problem is:
how to implement both features ("year-group-subgroup" fet and enable only
a "year-group" one.) at the same time without confusing a user?
191------------------------DONE-----------------------------
192---------------------------------------------------------
(DONE? Liviu Lalescu: in FET-6.17.0 (February 2024) we added the constraint teacher(s)/students (set) max building changes per (real) day in hourly interval. Is this item solved?)
From mbarsan (on forum):
We have a school with 8 periods per day, with a short break every 2 hours.
There are 3 buildings.
Teacher may change building during those short breaks.
So we haven't to say to FET any duration to change buildings. This may be done at beginning of hours nn. 3, 5 and 7.
If a teacher works in a building at first and second periods, he may change building and work at third period.
We may chose to insert breaks times (students and teachers not available) between periods 2 and 3, 4 and 5, 6 and 7 to allow building change in a period. But now we can handle 3 hours lessons only with the constraint "two activities are grouped", using the same teacher and same class with (sub)activities of 1 and 2 hours. We have also problems with subactivities with duration 2 that FET may not put with a break inside (so we have to use the same trick as above).
Do you think that we may define a grid of hours to allow building changes only at specific periods?
193---------------------------------------------------------
From _indianajones (on forum):
I think it would be useful, in case of difficult generation, to save the incomplete timetable in a .fet file without stopping the process,
so I could convert this file with "Excel FET file import 2010 Marco Albano ver 2.0" and try to solve it manually.
---
Liviu Lalescu: Generate, stop, advanced lock -> lock all activities of current timetable -> save file.
---
_indianajones: ...but in this way the generation is definitively stopped.... am I wrong?
After hours of elaboration I wish to save the best timetable found and let FET goes ahead...
is it possible?
---
Liviu Lalescu: Oh, sorry, I did not see that you wanted generation to continue.
I'll add your suggestion in the TODO, but it is not very nice, because I prefer FET to save .fet timetable files only when they are complete.
Meanwhile, you can do this, for only one interruption (if you have a multiple core computer): start two generations on the same timetable, with the same FET version, with the same initial random seed state, then interrupt one of them after a few hours, and leave the other one running.
194---------------------------------------------------------
(see also entry #26)
From russell (on forum):
I hope FET could plan courses soon.
195---------------------------------------------------------
From russell (on forum):
I have a teacher come to school in Monday and Wednesday OR in Tuesday and Friday. How to implement this constraint in FET? (I have some other constraint related to that teacher and his activities)
---
Liviu Lalescu:
It would be easy to make a change in the code for this. But I don't know how to make it a general constraint with FET-style-name.
These tricks might work:
- Teacher not available on Thursday;
- Max days per week for this teacher = 4;
- Add two dummy activities for this teacher, duration = number of hours per day. Not allowed on Thursday (not really needed, because the teacher is not available). Then min+max 3 days between them;
I hope I got all the details. Please correct me if I am wrong.
---
russell:
Thanks for your reply.
Can you please explain to me about "min+max 3"? Dose it mean exactly 3 days distance (Tuesday to Friday)?
Dose your solution work for days with different hours (Monday has 8 hours and others 6)?
---
Liviu Lalescu:
The constraint min, then max days between activities.
If the teacher cannot have more than 6 working hours on Monday, use a constraint activities occupy max time slots from selection for his activities, so he has no more than 6 working hours on Monday (less work for you).
If he can have 7 or 8 real working hours on Monday, a lot of work for you: constrain each pair dummy - real activity pair for this teacher to not be on the same day (min 1 days between activities).
Please think of other solutions, if you want.
---
russell:
Most of the “select a day’s group from a set of the day’s group for a teacher” constraints can implement by other FET constraints. But if FET has a specific constraint for that it would be better.
---
Liviu Lalescu:
Maybe better "Teacher works in a days group from a set of days groups".
196---------------------------------------------------------
From russell:
Maybe adding a Pause/Resume to "Generate new timetable" window (changing Start button after press to Pause).
(Related to item #277.)
197---------------------------------------------------------
From nouvakis (on forum, also from mercurialuser, also on forum):
If I set
min_hours = 3 and
max hours = 5
and a teacher should work 21 hours per week we could have combination: 5 + 5 + 5 + 3 + 3
but a better one should be: 5 + 5 + 4 + 4 + 3
So, I recommend a new constraint like "frequency of max hours per day"
For my example this new parameter would be 2 (5+5)
---
Liviu:
I am thinking of making it a separate constraint. And put it before max hours daily in the menu, because it might be better than the old existing constraint. Only 100% weight percentage allowed. How to name it? "Teacher(s)/Students (set) max hours daily max occurences per week"?
---
Liviu:
I thought about this. I looked over the present code (official FET-5.23.3, src/engine/generate.cpp).
1) The changes are very difficult in generate.cpp. There are many possibilities to consider, and maybe a perfect treatment is impossible.
See for instance generate.cpp, lines 7543-7572. These are for a unique limit per day. But if you want two possible limits (5 two times per week, the rest maximum 4), the things become much more difficult.
(I care in these lines above about the gaps.)
2) The changes are critical in generate.cpp. New timetables might become impossible.
Anyway, I'll keep this suggestion in my mind. But for now I do not have the courage/possibility to do it.
I hope that by using some tricks you can overcome the problems.
See also fet-v.v.v/doc/algorithm/improve-todo-item-197.txt.
---
From mercurialuser:
Italian school, students have 5 days, 6 periods each.
Teachers teach 18 periods.
I have a min hours per day set to 2, and some teachers have 2 days with 2 hours and unfortunately 2 days with 5 teaching hours...
Is it possible to tell FET that teachers may teach 2 periods and 5 periods only once in a week ?
I'm testing with minimum hours per day set to 3 but I feel it is a too strict requirements...
198---------------------------------------------------------
From Volker Dirr (also from mouiata, on the forum):
new useful constraint:
time constraints -> teachers -> max total sum of teachers gaps per week
199---------------------------------------------------------
From liquid (on forum):
I think it would be useful to introduce aliases for years, groups and subgroups. Their names sound kind of technical, particularly when one lets FET automatic year divide. It's OK when you work with schedule but it would be more readable when aliases were shown (of course if present) on the timetable.
Volker:
Maybe i missunderstood, but it sound to me like you are talking about the names that are generated automatically. You can simply rename them (by "modify") if you want (no problems with years and groups. be carefull with subgroups, because you must do it several times!)
liquid:
I exactly thought about what Volker had understood. E.g. if you had groups and subgroups automatically generated the name for resulting subgroup would come from names of groups and a year. It would be desirably sometimes to give the generated subgroup a more descriptive name. As the example:
year - 1
group division: 1. by a and b 2. by i1 and i2 (i for computer science)
you will get the following groups: 1 a, 1 b, 1 i1, 1 i2
and subgroups: 1 a i1, 1 a i2, 1 b i1, 1 b i2
For generation purposes it's OK thanks short names but if you wanted to make a timetable for all the students and teachers they would like maybe 1a comp.sci. group 1. That's what I think about.
Liviu:
But why not simply divide by a,b then comp.sci. group 1,comp.sci group 2?
liquid:
...just for simplicity's sake. Aliases almost always serve as more descriptive names. If I tried to give more descriptive names for groups they might not fit into boxes at activity setting window or elsewhere. Particularly when group division is not trivial. Short names are good while designing a schedule.
Volker:
I can recommend using short names. I use everywhere shortcuts (subjects has only 1-2 characters. Teacher names 3 characters. Students only around 1 to 4 characters.)
Of course new students "wonder" the first day about that shortcuts, but they are clever enough to understand it very fast.
liquid:
Oh, maybe that's the right way. I was afraid that schedule could be misunderstood with many short and cryptic names but your experience tells the opposite. OK then, thanks for suggestions.
---
liquid suggests also aliases for rooms.
Also from abautu, on forum: Could you add an extra field for subjects and teachers to allow for a short name/abbreviation of it?
For example, for a subject called "Classical literature" a short name could be "CL" or "C-101". Then the print timetable features
would allow to print the short names (i.e. compact timetable) or long names (i.e. normal timetable).
See also item #324
200---------------------------------------------------------
(Added on 2014-10-12)
From fromturkey (on forum):
I think the program should be able to use multiple CPUs/cores. Especially when trying to generate difficult timetables it takes a lot
of time processing. If the program could use multiple CPUs, it would take much more shorter.
Is it possible with the current algorithm?
Liviu Lalescu:
Unfortunately, I cannot think of how to adapt the FET algorithm to multiple cores.
Also suggested by Benahmed Abdelkrim on the forum (https://lalescu.ro/liviu/fet/forum/index.php?topic=2420.0)
201-------------------------DONE----------------------------
202---------------------------------------------------------
From Vanyo Georgiev (on forum):
The last opened FET XML file is opened again on startup.
(Vanyo Georgiev provided the necessary code changes to do this.)
203---------------------------------------------------------
From Vanyo Georgiev (on forum):
One more place to check for a language .qm file - the work path.
(Vanyo Georgiev provided the necessary code changes to do this:
translation_loaded=translator.load("fet_"+FET_LANGUAGE, QDir::currentPath());
in fet.cpp.)
This change makes possible by setting the Working directory of the exe file in QtCreator to test the current translation without copying the .qm file to another directory.
204---------------------------------------------------------
From Vanyo Georgiev (on forum):
Save and restore tabWidget current page at start up.
(Vanyo Georgiev provided the necessary code changes to do this.)
Liviu: See the ChangeLog for FET-5.19.0: "- When starting FET, the first shortcuts tab section (File) is selected (suggested by a user)." Previously, I saved the main tab widget position (as you do), but a user suggested that it is better to start always with the File tab selected.
Anyway, I'll add this in the TODO, as your suggestion.
Vanyo Georgiev: May be there must be a setting: 'Remember current page' and each user to choose his own preference. I'll try to do so.
(Vanyo Georgiev provided the necessary code changes to do this.)
205---------------------------------------------------------
From bharatstank (on forum): ( https://lalescu.ro/liviu/fet/forum/index.php?topic=1826.0 )
bharatstank:
I have below created a Student structure (having 60 students):-
(Student) Year - Group - Sub Group
Year Group Sub Group
MBACPM (60) MBA CPM L (60) MBACPM G1 (30)
MBACPM G2 (30)
Activity Tags:
Lecture
Tutorial
Practical
Activities created are as follows:-
1. MBA CPM L (Lecture) of a SUBJECT1 for 2 hours duration is conducted by a FACULTY1 for all the 60 students
2. MBA CPM G1 (Tutorial) of a SAME SUBJECT1 for 2 hours is conducted by SAME FACULTY1 for 30 students
3. MBA CPM G2 (Tutorial) of a SAME SUBJECT1 for 2 hours is conducted by SAME FACULTY1 for 30 students
4. MBA CPM G1 (Practical) of a SAME SUBJECT1 for 2 hours is conducted by SAME FACULTY1 for 30 students
5. MBA CPM G2 (Practical) of a SAME SUBJECT1 for 2 hours is conducted by SAME FACULTY1 for 30 students
6. MBA CPM L (Lecture) of a SUBJECT2 for 2 hours duration is conducted by a FACULTY2 for all the 60 students
7. MBA CPM G1 (Tutorial) of a SAME SUBJECT2 for 2 hours is conducted by SAME FACULTY2 for 30 students
8. MBA CPM G2 (Tutorial) of a SAME SUBJECT2 for 2 hours is conducted by SAME FACULTY2 for 30 students
9. MBA CPM G1 (Practical) of a SAME SUBJECT2 for 2 hours is conducted by SAME FACULTY2 for 30 students
10. MBA CPM G2 (Practical) of a SAME SUBJECT2 for 2 hours is conducted by SAME FACULTY2 for 30 students
and so on...
How to place the activities - so that:-
1. For Subject1 - Lecture followed by Tutorial followed by Practical is conducted in sequence in a day and FET do NOT place tutorial or practical before Lecture
I want to use this process as a template for every subject (Lecture -> Tutorial -> Practical). So that FET places all the possible activities according to this template. and constraints are only applied in case of specific activities or exceptions.
How to achieve this scenario.
---
Liviu:
I am not sure I understand well, but I think you can use a constraint three activities grouped and two constraints two activities ordered.
---
bharatstank:
using "constraint three activities grouped and two constraints two activities ordered." - here I need to create manual constraints for all the approx. 200 activities.
is there a way - where I can create a Standardised constraints using Activity Tag.
I have defined 3 activity tag (which needs to follow the below sequence):-
1. Lecture
2. Tutorial
3. Practical
As per the guideline - for subject1 - First lecture is conducted, Then its Tutorial is conducted and then its Practical is conducted.
In my case FET does not places activity like (Subject1 lecture -> Subject1 Tutorial -> Subject1 Practical) in sequence but most of the time it places the activity like (Subject1 Lecture -> Subject2 Tutorial -> Subject3 Practical or vice versa)
how to resolve this issue.
I have also attached the timetable screenshot:-
1. Correctly placed activity shown in Green circle
2. Wrongly placed activity shown in Red Circle
Here it is not important that Subject1 (lecture, Tutorial, Practical) should be consecutive but has to follow activity tag order (for a particular subject). otherwise timetable starts with Tutorial or Practical without Lecture - which is not feasible.
---
Liviu:
I do not understand the picture in your attachment.
If it is not important that the three kinds of activities are grouped, you might need to add only two constraints two activities ordered. You might want to add also a constraint activities same starting day.
About making this automatic for activity tags - I have added this in the TODO list.
206---------------------------------------------------------
From Vanyo Georgiev (on forum):
There are translations of the FET User manual in several languages https://lalescu.ro/liviu/fet/doc/
I think it would be nice, when there is an User manual in the currently set language of the FET interface, by clicking on the Help -> Online -> Help contents the User manual in the language of the FET interface is opened.
207---------------------------------------------------------
From Volker Dirr:
someone used split year automatically.
this year he doesn't need all classes again. class / group "5 d" is not
needed.
so he deletes group "5 d".
but in fact that doesn't improve speed (much), because the number of
subgroups stays the same.
but if there will be a question after removing a group (or year) like "do
you also want to remove all subgroups of this group in all other groups?",
then the number of subgroups will be reduced and it will be easier to
generate.
(Yes, instead of removing a group he could simply use the split year
automatically once again, but maybe he forgot, he has got a new computer, he
already changed "presettings" because of other years or the simply fear
that he will do it incorrect; so he like to use delete group only, because
it is easier.)
Volker wrote code for this, but it is not perfectly optimized for speed.
Below is his code for file fet-v.v.v/src/interface/groupsform.cpp (see
the string Volker Dirr start/end):
old file groupsform.cpp - last modified on 8 February 2015 (FET-5.28.0)
new Volker Dirr's code: 5 October 2015
---
//
//
// Description: This file is part of FET
//
//
// Author: Lalescu Liviu <Please see https://lalescu.ro/liviu/ for details about contacting Liviu Lalescu (in particular, you can find here the email address)>
// Copyright (C) 2003 Liviu Lalescu <https://lalescu.ro/liviu/>
//
/***************************************************************************
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/
#include "addstudentsgroupform.h"
#include "modifystudentsgroupform.h"
#include "groupsform.h"
#include "timetable_defs.h"
#include "timetable.h"
#include "fet.h"
#include "studentsset.h"
#include "longtextmessagebox.h"
#include <QMessageBox>
#include <QListWidget>
#include <QScrollBar>
#include <QAbstractItemView>
#include <QSplitter>
#include <QSettings>
#include <QObject>
#include <QMetaObject>
extern const QString COMPANY;
extern const QString PROGRAM;
struct subgroupItem{
QString yearName;
QString groupName;
QString subgroupName;
};
GroupsForm::GroupsForm(QWidget* parent): QDialog(parent)
{
setupUi(this);
groupTextEdit->setReadOnly(true);
modifyGroupPushButton->setDefault(true);
yearsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
groupsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
connect(yearsListWidget, SIGNAL(currentTextChanged(const QString&)), this, SLOT(yearChanged(const QString&)));
connect(addGroupPushButton, SIGNAL(clicked()), this, SLOT(addGroup()));
connect(removeGroupPushButton, SIGNAL(clicked()), this, SLOT(removeGroup()));
connect(purgeGroupPushButton, SIGNAL(clicked()), this, SLOT(purgeGroup()));
connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
connect(groupsListWidget, SIGNAL(currentTextChanged(const QString&)), this, SLOT(groupChanged(const QString&)));
connect(modifyGroupPushButton, SIGNAL(clicked()), this, SLOT(modifyGroup()));
connect(sortGroupsPushButton, SIGNAL(clicked()), this, SLOT(sortGroups()));
connect(activateStudentsPushButton, SIGNAL(clicked()), this, SLOT(activateStudents()));
connect(deactivateStudentsPushButton, SIGNAL(clicked()), this, SLOT(deactivateStudents()));
connect(groupsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(modifyGroup()));
centerWidgetOnScreen(this);
restoreFETDialogGeometry(this);
//restore splitter state
QSettings settings(COMPANY, PROGRAM);
if(settings.contains(this->metaObject()->className()+QString("/splitter-state")))
splitter->restoreState(settings.value(this->metaObject()->className()+QString("/splitter-state")).toByteArray());
yearsListWidget->clear();
for(int i=0; i<gt.rules.yearsList.size(); i++){
StudentsYear* year=gt.rules.yearsList[i];
yearsListWidget->addItem(year->name);
}
if(yearsListWidget->count()>0)
yearsListWidget->setCurrentRow(0);
else
groupsListWidget->clear();
}
GroupsForm::~GroupsForm()
{
saveFETDialogGeometry(this);
//save splitter state
QSettings settings(COMPANY, PROGRAM);
settings.setValue(this->metaObject()->className()+QString("/splitter-state"), splitter->saveState());
}
void GroupsForm::addGroup()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
QString yearName=yearsListWidget->currentItem()->text();
int yearIndex=gt.rules.searchYear(yearName);
assert(yearIndex>=0);
AddStudentsGroupForm form(this, yearName);
setParentAndOtherThings(&form, this);
form.exec();
yearChanged(yearsListWidget->currentItem()->text());
int i=groupsListWidget->count()-1;
if(i>=0)
groupsListWidget->setCurrentRow(i);
}
void GroupsForm::removeGroup()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
if(groupsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected group"));
return;
}
QString groupName=groupsListWidget->currentItem()->text();
int groupIndex=gt.rules.searchGroup(yearsListWidget->currentItem()->text(), groupName);
assert(groupIndex>=0);
QList<QString> yearsContainingGroup_List;
QSet<QString> subgroupsList;
//QSet<QString> yearsContainingGroup_Set;
foreach(StudentsYear* year, gt.rules.yearsList)
foreach(StudentsGroup* group, year->groupsList)
if(group->name==groupName){
yearsContainingGroup_List.append(year->name);
foreach(StudentsSubgroup* subgroup, group->subgroupsList)
subgroupsList<<subgroup->name;
}
assert(yearsContainingGroup_List.count()>=1);
QString s;
if(yearsContainingGroup_List.count()==1)
s=tr("This group exists only in year %1. This means that"
" all the related activities and constraints will be removed. Do you want to continue?").arg(yearsListWidget->currentItem()->text());
else{
s=tr("This group exists in more places, listed below. It will only be removed from the current year,"
" and the related activities and constraints will not be removed. Do you want to continue?");
s+="\n";
foreach(QString str, yearsContainingGroup_List)
s+=QString("\n")+str;
}
int t=LongTextMessageBox::mediumConfirmation(this, tr("FET confirmation"), s,
tr("Yes"), tr("No"), QString(), 0, 1);
if(t==1)
return;
//by Volker Dirr (start)
QList<subgroupItem> removeSubgroups;
QString removeSubgroupsStringForGUI;
foreach(StudentsYear* year, gt.rules.yearsList){
foreach(StudentsGroup* group, year->groupsList){
if(group->name!=groupName){
foreach(StudentsSubgroup* subgroup, group->subgroupsList){
if(subgroupsList.contains(subgroup->name)){
subgroupItem tmpItem;
tmpItem.yearName=year->name;
tmpItem.groupName=group->name;
tmpItem.subgroupName=subgroup->name;
removeSubgroups<<tmpItem;
removeSubgroupsStringForGUI+=tr("%1 - %2 - %3").arg(year->name).arg(group->name).arg(subgroup->name)+"\n";
}
}
}
}
}
if(removeSubgroups.count()>0){
s=tr("Subgroups of this group are also used in other groups. They might be needles now. In particular if you used FETs automatic split year feature."
" Should the following subgroups be removed also?");
s+="\n"+removeSubgroupsStringForGUI;
int t=LongTextMessageBox::mediumConfirmation(this, tr("FET confirmation"), s,
tr("Yes"), tr("No"), QString(), 0, 1);
if(t==0){
foreach(subgroupItem tmpItem, removeSubgroups){
bool tmp=gt.rules.removeSubgroup(tmpItem.yearName, tmpItem.groupName, tmpItem.subgroupName);
assert(tmp);
}
}
}
//by Volker Dirr (end)
/*if(QMessageBox::warning( this, tr("FET"),
tr("Are you sure you want to delete group %1 and all related subgroups, activities and constraints?").arg(groupName),
tr("Yes"), tr("No"), 0, 0, 1 ) == 1)
return;*/
bool tmp=gt.rules.removeGroup(yearsListWidget->currentItem()->text(), groupName);
assert(tmp);
if(tmp){
int q=groupsListWidget->currentRow();
groupsListWidget->setCurrentRow(-1);
QListWidgetItem* item;
item=groupsListWidget->takeItem(q);
delete item;
if(q>=groupsListWidget->count())
q=groupsListWidget->count()-1;
if(q>=0)
groupsListWidget->setCurrentRow(q);
else
groupTextEdit->setPlainText(QString(""));
}
/*if(gt.rules.searchStudentsSet(groupName)!=nullptr)
QMessageBox::information( this, tr("FET"), tr("This group still exists into another year. "
"The related subgroups, activities and constraints were not removed"));*/
}
void GroupsForm::purgeGroup()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
if(groupsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected group"));
return;
}
QString groupName=groupsListWidget->currentItem()->text();
int groupIndex=gt.rules.searchGroup(yearsListWidget->currentItem()->text(), groupName);
assert(groupIndex>=0);
QList<QString> yearsContainingGroup_List;
QSet<QString> subgroupsList;
//QSet<QString> yearsContainingGroup_Set;
foreach(StudentsYear* year, gt.rules.yearsList)
foreach(StudentsGroup* group, year->groupsList)
if(group->name==groupName){
yearsContainingGroup_List.append(year->name);
foreach(StudentsSubgroup* subgroup, group->subgroupsList)
subgroupsList<<subgroup->name;
}
assert(yearsContainingGroup_List.count()>=1);
QString s;
if(yearsContainingGroup_List.count()==1)
s=tr("This group exists only in year %1. All the related activities and constraints "
"will be removed. Do you want to continue?").arg(yearsListWidget->currentItem()->text());
else{
s=tr("This group exists in more places, listed below. It will be removed from all these places."
" All the related activities and constraints will be removed. Do you want to continue?");
s+="\n";
foreach(QString str, yearsContainingGroup_List)
s+=QString("\n")+str;
}
int t=LongTextMessageBox::mediumConfirmation(this, tr("FET confirmation"), s,
tr("Yes"), tr("No"), QString(), 0, 1);
if(t==1)
return;
//by Volker Dirr (start)
QSet<QString> removeSubgroups;
QString removeSubgroupsStringForGUI;
foreach(StudentsYear* year, gt.rules.yearsList){
foreach(StudentsGroup* group, year->groupsList){
if(group->name!=groupName){
foreach(StudentsSubgroup* subgroup, group->subgroupsList){
if(subgroupsList.contains(subgroup->name)){
if(!removeSubgroups.contains(subgroup->name)){
removeSubgroups<<subgroup->name;
}
removeSubgroupsStringForGUI+=tr("%1 - %2 - %3").arg(year->name).arg(group->name).arg(subgroup->name)+"\n";
}
}
}
}
}
if(removeSubgroups.count()>0){
s=tr("Subgroups of this group are also used in other groups. They might be needles now. In particular if you used FETs automatic split year feature."
" Should the following subgroups be removed also?");
s+="\n"+removeSubgroupsStringForGUI;
int t=LongTextMessageBox::mediumConfirmation(this, tr("FET confirmation"), s,
tr("Yes"), tr("No"), QString(), 0, 1);
if(t==0){
foreach(QString tmpItem, removeSubgroups){
bool tmp=gt.rules.purgeSubgroup(tmpItem);
assert(tmp);
}
}
}
//by Volker Dirr (end)
/*if(QMessageBox::warning( this, tr("FET"),
tr("Are you sure you want to delete group %1 and all related subgroups, activities and constraints?").arg(groupName),
tr("Yes"), tr("No"), 0, 0, 1 ) == 1)
return;*/
bool tmp=gt.rules.purgeGroup(groupName);
assert(tmp);
if(tmp){
int q=groupsListWidget->currentRow();
groupsListWidget->setCurrentRow(-1);
QListWidgetItem* item;
item=groupsListWidget->takeItem(q);
delete item;
if(q>=groupsListWidget->count())
q=groupsListWidget->count()-1;
if(q>=0)
groupsListWidget->setCurrentRow(q);
else
groupTextEdit->setPlainText(QString(""));
}
/*if(gt.rules.searchStudentsSet(groupName)!=nullptr)
QMessageBox::information( this, tr("FET"), tr("This group still exists into another year. "
"The related subgroups, activities and constraints were not removed"));*/
}
void GroupsForm::yearChanged(const QString &yearName)
{
int yearIndex=gt.rules.searchYear(yearName);
if(yearIndex<0){
groupsListWidget->clear();
groupTextEdit->setPlainText(QString(""));
return;
}
groupsListWidget->clear();
StudentsYear* sty=gt.rules.yearsList.at(yearIndex);
for(int i=0; i<sty->groupsList.size(); i++){
StudentsGroup* stg=sty->groupsList[i];
groupsListWidget->addItem(stg->name);
}
if(groupsListWidget->count()>0)
groupsListWidget->setCurrentRow(0);
else
groupTextEdit->setPlainText(QString(""));
}
void GroupsForm::groupChanged(const QString &groupName)
{
StudentsSet* ss=gt.rules.searchStudentsSet(groupName);
if(ss==nullptr){
groupTextEdit->setPlainText(QString(""));
return;
}
StudentsGroup* sg=(StudentsGroup*)ss;
groupTextEdit->setPlainText(sg->getDetailedDescriptionWithConstraints(gt.rules));
}
void GroupsForm::sortGroups()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
gt.rules.sortGroupsAlphabetically(yearsListWidget->currentItem()->text());
yearChanged(yearsListWidget->currentItem()->text());
}
void GroupsForm::modifyGroup()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
QString yearName=yearsListWidget->currentItem()->text();
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
int q=groupsListWidget->currentRow();
int valv=groupsListWidget->verticalScrollBar()->value();
int valh=groupsListWidget->horizontalScrollBar()->value();
if(groupsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected group"));
return;
}
QString groupName=groupsListWidget->currentItem()->text();
int groupIndex=gt.rules.searchGroup(yearsListWidget->currentItem()->text(), groupName);
assert(groupIndex>=0);
StudentsSet* sset=gt.rules.searchStudentsSet(groupName);
assert(sset!=nullptr);
int numberOfStudents=sset->numberOfStudents;
ModifyStudentsGroupForm form(this, yearName, groupName, numberOfStudents);
setParentAndOtherThings(&form, this);
form.exec();
yearChanged(yearsListWidget->currentItem()->text());
groupsListWidget->verticalScrollBar()->setValue(valv);
groupsListWidget->horizontalScrollBar()->setValue(valh);
if(q>=groupsListWidget->count())
q=groupsListWidget->count()-1;
if(q>=0)
groupsListWidget->setCurrentRow(q);
else
groupTextEdit->setPlainText(QString(""));
}
void GroupsForm::activateStudents()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
if(groupsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected group"));
return;
}
QString groupName=groupsListWidget->currentItem()->text();
int count=gt.rules.activateStudents(groupName);
QMessageBox::information(this, tr("FET information"), tr("Activated a number of %1 activities").arg(count));
}
void GroupsForm::deactivateStudents()
{
if(yearsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected year"));
return;
}
int yearIndex=gt.rules.searchYear(yearsListWidget->currentItem()->text());
assert(yearIndex>=0);
if(groupsListWidget->currentRow()<0){
QMessageBox::information(this, tr("FET information"), tr("Invalid selected group"));
return;
}
QString groupName=groupsListWidget->currentItem()->text();
int count=gt.rules.deactivateStudents(groupName);
QMessageBox::information(this, tr("FET information"), tr("De-activated a number of %1 activities").arg(count));
}
---
208---------------------------------------------------------
From Volker Dirr:
Code more checks to warn users about conflicting constraints before generating. For example:
min days between activities and consecutive/grouped activities constraints.
209---------------------------------------------------------
From andrealva:
He is referring to the facility to sort constraints by comments, which was dropped (being considered useless) in FET-5.25.0 and subsequent versions:
One use though, which can be given to sorting the comments, is to arrange together all the constraints related to a teacher(s) or a class(es) ...
it would help to quickly identify them without using the filter ....
210--------------------------DONE---------------------------
211---------------------------------------------------------
From Volker Dirr:
FET asks if the user is sure he wants to add an activity without students. Maybe the question must also
include something like "it is correct if you want to add a teacher meeting."
So that the user is not deterred by the warning in situations in which an activity without students is OK.
212---------------------------------------------------------
From Bob Hairgrove (on forum):
Colors can be enabled for highlighting the cells. However, looking at this function in the FET source code, it is clear that these are hard-coded values:
Code:
void AddConstraintStudentsSetNotAvailableTimesForm::colorItem(QTableWidgetItem* item)
{
if(USE_GUI_COLORS){
if(item->text()==NO)
item->setBackground(QBrush(Qt::darkGreen));
else
item->setBackground(QBrush(Qt::darkRed));
item->setForeground(QBrush(Qt::lightGray));
}
}
I think the colors should be configurable. For example, I would like to use a light green background for available times and white for not available times in the "student set not available" dialog, whereas for the corresponding teacher dialog, perhaps different colors could be used (white = available; dark grey = not available). In case the colors are used, you could hide the "X" by setting the foreground color to the same as the background color since it would be superfluous. That way, you could keep the rest of the functionality the way it is.
213-------------------------DONE----------------------------
214---------------------------------------------------------
From Khalilullah Yosufi:
... we expect from software to generate a timetable that we could separate some border or jointed gaps for some teachers
but there is no any place to define/plan to the software about separating the jointed gaps during a day. Hopefully
someday we would receive an update version of the FET software that has ability to separate joint gaps we want maybe
by the name of continuously gaps per day for a teacher. ...
---
Further clarification:
... Hope one day we could plan or tell to the FET software to add Maximum continuously gaps per day for a teacher = 01 ...
---
Further clarification:
I need a gap to be maximum 1 hour continuously.
215---------------------------------------------------------
From mercurialuser (on forum):
To better study the code I'd like to clean generate.cpp:
- removing all the commented code
- adding comments to illustrate the algo
- check to see if I can use some macros for code
- in randomswap try to remove all that ok* variables that can be reduced to a couple (since they are not used outside their block)
- remove the #if 1/#endif and if(1) { ... } blocks
216---------------------------------------------------------
From mercurialuser (on forum):
I'd just like to report some thing that may give a little speedup to the code and to avoid duplicates.
For example in ::generate several matrices are reset first and then assigned. The exact same code is used for loading teachersTimetable and newTeachersTimetable but they could be compacted in one loop. There may be probably less cache hits for accessing these 2 matrixes but I think that the multiple loops and retrieving act variable multiple times are more cpu expensive anyway.
For assigning these matrixes and some others the code loops (there are 2 variants with different variable names):
for(int j=0; j<gt.rules.nInternalActivities/*added_act*/; j++){
The code in the loop does some checks that are replicated in several other loops but they check on data that, as far as I understand, can't change between consecutive checks. So it seems to me that they are redundant.
217-----------------------DONE------------------------------
218-----------------------DONE?-----------------------------
From Volker Dirr:
since FET is able to change split year automatically without losing
activities, it is useful to load and save the settings.
i don't talk about qsettings. it it already stored there and that is fine.
but the settings are different a bit. so year 5 and 6 have very similar
categories and divisions, but year 7-10 have got a bit different.
so it would be fine to save and load them into a file. so a user can save
settings for year 5-6 and save settings for year 7-10. i am not sure if
into the fet file or into a separate file. it has different advantages and
disadvantages. but i think into a new separate file is a bit better.
219-------------------------DONE----------------------------
220---------------------------------------------------------
From Volker Dirr (on forum):
When the user clicks "Toggle lock/unlock" with zero selected cells in the
"Timetable view" dialogs, maybe it would be better to inform more verbosely
the user: "No activities were locked/unlocked, because no activities were
selected".
221---------------------------------------------------------
From Volker Dirr:
in years dialog should be an option: increase all years.
now pseudo code: (mixing strings and int. so real code is a bit more
complicated)
foreach(year, yearsList){
if(year = int){
newYearsList<<year
} else {
warning = "unchanged"
}
sort newYearsList from high to low
foreach(year, newYearsList){
newIntYear=year++;
search that year.
foreach(group, year){
foreach(subgroup, group){
if(subgroup.left(year){
subgroup.replace.left(newIntYear)
else
warning = "impossible to rename. maybe modified manually?"
}
if(group.left(year){
group.replace.left(newIntYear)
else
warning = "impossible to rename. maybe modified manually?"
}
if(year.left(year){
year.replace.left(newIntYear)
else
warning = "critical bug!"
}
}
222---------------------------------------------------------
From Mohamed NAJARI:
1) Can you add a command to move the teachers, students, materials and activities during entry?
2) Why not put weight as the 100% value by default instead of 95% during the addition of an activity?
223---------------------------------------------------------
From youssouf (on forum):
My suggestion is : activating the partition button when modifying the teacher's task.
because :
1. We enter the teacher's tasks ( choice - subject - Partition - period - etc.)
2. When we want to edit the task of a teacher, we find that the division button is not enabled and we will be forced to delete that task and we retype spot again.
224------------------------DONE-----------------------------
225---------------------------------------------------------
From abdeljalil elghazoui (on forum):
abdeljalil:
At the end of the production time table
we sometimes want to change instead of an activity
But if we follow the normal route of fet its currency fully all activities
Is there is a way to change the place of this activity specifically
Without major changes in the other activities
Liviu:
Either:
1) Open from ~/fet-results/data_and_timetable.fet, then unlock a specific activity and regenerate;
or
2) After generating, select Advanced lock -> lock all activities of the current timetable. Then unlock a specific activity and regenerate.
But you may obtain an impossible timetable.
abdeljalil:
You're right, we can not get what we wanted
Is it possible for this to work a new property under the name:
"a teacher's not available times with the current timetable"
as "not available times" are "the free hours withe the current timetable"
And it will save in "a teacher's not available times"
And when we want to produce a new table we change a table for one teacher
---
We also ask you for a similar property in Students set
It seems that these characteristics would be more effective
You can set the blank time
Although it is possible to move Activitys
For a teacher or more
Or for one Student set or for more
226---------------------------------------------------------
From AlexL (on forum):
My proposal is to use transifex for translations: https://www.transifex.com
It works fine with .ts files, has suggestions for translations, .etc.
227---------------------------------------------------------
From MilesM (on forum):
I think it would be helpful to be able to assign time lengths to periods (even if the actual periods are multiples of that as suggested above) in order to be able to generate statistics on time per subject, per grade etc. It would allow another level of validation to make sure everything works.
228---------------------------------------------------------
From adso (on forum):
It would be useful in the best timetable processed (highest html) (but unfinished) to have at the top of the table for each teacher and each class the number of hours included and not included in order to understand where the problems are.
And have a file fet also not complete to import into Excel to be able to work manually.
229---------------------------------------------------------
From Volker Dirr:
About adding constraints students/teachers interval max days per week:
I think you should clarify it in the interface: In FET you call it only
"interval start hour" and "interval end hour", but you might say better
"start at beginning of hour" and "end at end of hour" (or "until end of hour").
230---------------------------DONE--------------------------
231---------------------------------------------------------
From Davide Cottignoli (on forum):
I often need to input many activities with fixed time in working hours and I find the user interface very tedious.
It would be more simple if the dialog is divided in two parts a follow:
On the left a list of activities (not the combo-box or drop-down box).
On the right a table grid with hours and day and the permission to mark only a square of the grid.
In many other dialogs with the same scheme (for example in "add teacher not available times") it would be useful to have the list instead of the drop down box.
232---------------------------------------------------------
From Davide Cottignoli (on forum):
Implement lock/unlock of activities from a specific building.
233---------------------------------------------------------
From Volker Dirr and Liviu Lalescu:
About coloring the three timetable view dialogs:
Volker:
A combobox with "disabled" as first item should be perfect for that task.
Coloring produces sadly pretty many very similar colors. That should be
fixed. (for example by skipping similar colors or calculating a fixed
difference between colors.)
Liviu:
The user can wish to choose the coloring of each view, in a settings menu:
Color teachers view by: Students, Subject, Tag, etc., or disabled, etc.
234---------------------------------------------------------
From Luigi Valbonesi:
When fet generates timetables, to run a parallel routine that saves
every new generated timetable (the best possible at the moment)
overwriting the previous and the most difficult ativities with the one
that blocked the generation. If the computer crashes there will be some
data to think about and work with.
235---------------------------------------------------------
From fernandolordao and Volker Dirr (on forum):
fernandolordao:
By default, teachers time constraints are permanently shown at same sequence that we add.
It would be useful if we could sort them by teachers' name in order to reduce time wasting for systematic modifications in time restrictions for many teachers. By the proposed way we could do modifications teacher-by-teacher following the name sequence without having to apply filter for each of them.
Similar sort options could be designed to other restrictions.
Liviu Lalescu:
I'd suggest you to go to "All time constraints" dialog, filter "Contains" "Teacher not available", then "Sorted". Because the weight is always 100% and the teacher is after the weight in the constraint description, it works
Volker:
The request is to save time. You don't save time if you always need to click a filter, write some stuff and also click sort. Very unhandy.
In fact nearly all constraints and activities should be sorted. For TODO:
Add a new dialog in FET->advanced->sort
there should be checkboxes and a sort pushbutton.
the checkboxes should be:
sort teacher constraints by teacher names.
sort students constraints by students names.
sort room constraints by room name.
sort teacher names of all activities
sort students names of all activities
sort activity tags of all activities
236---------------------------------------------------------
From Wizard (on forum):
Wizard:
Is there a way to set a minimum distance between first teaching hour and last teaching hour?
I have set maximum hours continuously to be 4, but sometimes the generated timetable contains a teacher that teaches 4 hours in a day and they become consecutive. What I would like is for him to be at school for at least 5 hours even if he has a gap.
Liviu Lalescu:
Unfortunately, I think this is impossible. I am not sure it can be implemented in the FET algorithm.
237---------------------------------------------------------
From Volker Dirr:
maybe for the TODO:
simplify the FET interface.
it is currently much to confusing if you work with it.
There are many constraint for a single teacher and all teachers.
it's unhandy to always check 2 lists.
in fact there is normally only a single "all" constraint.
in fact this suggestion should be done similar to students and rooms.
but i explain now with a single example, so it's easier to explain:
there are 2 dialogs:
fet -> data -> time constraints -> teachers -> max gaps per week for a
teacher
fet -> data -> time constraints -> teachers -> max gaps per week for all
teachers
it should be only a single dialog:
fet -> data -> time constraints -> teachers -> max gaps per week
the dialog is similar to the current one. just ordered. first the "all"
constraints, then the "single" constraints.
that will help much, since you only need to check a single list now and
it is still ordered, because the "all" will be always the first.
this save a lot of space in the fet main window interface.
then there are 2 ideas how to implement it.
idea a)
fet -> data -> time constraints -> teachers -> max gaps per week
can stay as "fet -> data -> time constraints -> teachers -> max gaps per
week for a teacher" currently is.
the "add" button must be renamed to "add one". And a "add all"
pushbutton must be added.
idea b)
we can also remove a lot of dialogs. in this example:
remove
fet -> data -> time constraints -> teachers -> max gaps per week for all
teachers
then only modify
fet -> data -> time constraints -> teachers -> max gaps per week for a
teacher
the combobox of this dialog only need a "all teachers" as first item.
i prefer variant b, because it will save a lot of code, memory,
translations, ...
238-------------------------DONE----------------------------
239---------------------------------------------------------
From Volker Dirr:
Shorten the strings in conflicts.txt. They are much too long. Very
confusing if you read that. (Maybe use shortcuts, sort them by type and
call the type only at the beginning of the list, ... There are many
variants to write it more clear.)
240---------------------------------------------------------
From Davide Cottignoli (on forum):
I have this simple suggestion that would, in my case, save a lot of time:
I have some teachers that bind their worktime to an already built timetable, so they look at various activities and decide to work in those hours.
Often this happens when teachers are in co-presence in laboratory or when teachers have students with disabilities and need to support them when specific subject are in time.
So, it is the best to "double click" on the subactivity, on the interface with the generated timetable, to show the dialog that modify the subactivity and add the new teacher.
Then regenerate all the timetable to obtain the new HTML even for these teachers.
Without this simple "double click" I need to write down the number of the sub-activity, go to Data->Activities then looking for that number, click "modify" then add the teacher.
Is it possible to do this and speed-up data enter?
241---------------------------------------------------------
From ant7 (on forum):
I do some tricks to make pair of activities to be
scheduled the same time but in two neighbouring days.
Because of that I need the constraint:
Fixed number of days between activities (with default value equal to 1).
To achive it I use:
Minimum number of days between activities (set to 1)
and
Maximum number of days between activities (set to 1)
so
t1-t2>=1day and t1-t2<= 1day give t1=t2 + 1day
Could you add this constraint?
Fixed number of days between activities (with default value equal to 1).
When I have to click hundreds of times Min and Max... constraints
I would save a lot of time if you add this constraint.
Also from abautu, on forum: A constraint "Exact N days between activities" would imply "Min N days between activities"
AND "Max N days between activities". I use these two constraints simultaneously in order to force two activities to be
scheduled in same week days (in an odd/even timetable).
242---------------------------------------------------------
From Lizio (on forum):
Lizio:
What about adding a new value to activities that is difficulty (let say 0=very easy like PE, 1=easy like art, 2= medium, 3=difficult and 4=very difficult like calculus), then it would be possible to add a constraint on maxximum difficulties per day in order to avoid "impossible days" for students.
Liviu:
Maybe you could add activity tags to activities, and use the constraint students activity tag max hours per day?
Lizio:
Unfortunately it would not work. It is not a matter of a max number of hours per day of a subject or a group of subjects, but not to sum too many difficult subjects in a day and your suggestion would work only if you define subjects as difficult or not, but I think it is better to define them with more levels.
For example, you can have physical education that is easy and history that is harder but not so hard, math that is the hardest, so 2 hours of history is like one of math and so on, if you define a maximum difficulty of, let's say 7, you can plan 2 hours of math (3+3) and then you must plan 2 of physical education (0+0) and one o art (1), then you can plan a day with 2 hours of literature (2+2), one of history (2) and one of art (1) and so on and you don't risk to plan 2 hours of math (3+3) than 2 of literature (2+2) and one of history (2) and a day with 2 hours of PE (0+0), 2 of art (1+1) and one of history (2).
Probably to make this improvement is a matter of a lot of coding and the improvement is not worth the effort to do it, but I don't know.
Liviu:
I understand. Do you know that you can add more activity tags for an activity? Also, you could add more constraints students activity tag max hours daily for the same students. Maybe these can help.
To consider a sum of weights might be too difficult to implement.
243---------------------------------------------------------
From Lizio (on forum):
come posso fare a dire a FET che deve mettere due attività concomitanti, ma non fissate, bensì scelte da un insieme?
Facciamo un esempio:
La palestra deve essere occupata per forza da due classi contemporaneamente e per farlo l'ho dichiarata come due aule distinte, ora vorrei che una prima fosse in palestra con un'altra prima e non, magari, con una quinta.
Le ore di ginnastica sono tutte attività separate e ho messo il vincolo di spazio sulle due palestre fittizie, FET mi alloca bene le cose, ma le classi sono mescolate, ora vorrei provare ad avere prime con prime, seconde con seconde, ecc.
Qualche soluzione che non comporti il numero totale di classi al quadrato di vincoli da scrivere? (Ho 31 classi da piazzare e scrivere 900 e passa vincoli è proibitivo)
---
I have 4 1st grade classes, 4 2nd grade, 6 3rd grade, 4 4th grade and 2 5th, I have 1 gymn and it must be used by 2 classes at the same time, so I created "palestra1" and "palestra2" and I have put the space constrain on each activity of physical education to be tought either in palestra1 or in palestra2.
Now I want in the gymn 2 classes of the same grade and not 2 of different grades.
The problem is that in my school we have 31 classes...
I don't want to put together 2 classes of my choice as this would be a real hard constrain to be managed.
244---------------------------------------------------------
From Arsenio Stabile:
He has a custom version, so that if he has minimum gaps between building changes = 1,
if a teacher name ends in " AB", if he changes buildings from hour 3 to 4 from
a building ending in " A" to a building ending in " B", the gap is no longer necessary.
Liviu Lalescu:
I am sorry, but this kind of constraint is too specialized. I cannot
think of a name and good implementation for everybody to use it. I
think I'll add your suggestion in the TODO list.
About you choosing the hours - this can made on your custom version,
but again I am not sure about a good way to present it to the user.
Arsenio:
In Italy it often happens that a school is divided into two buildings
one hour away for which is required a gap for the exchange and this
creates a major constraint. Some time ago I saw a commercial program
that provides the opportunity to do so now the gap is not attributed
to a teacher if the change takes place in the building at a certain time.
245---------------------------------------------------------
From ant7 (on forum):
After timetable generation
in timetable tab (teachers, students etc.)
I can see which activities are time or space locked ( I see LT or/and LS acronims)
and I can toggle these constraints for one or more activities whith mouse highlighting.
It would be very useful If I can see the same signature in HTML files.
When I updates timetable many times on website
I would like to tell people that some their activities are already fixed time or place.
It should be some general option in FET allowing user to decide wether show these tags or not in HTML files.
When timetable is finished it should be easy switched off visibility of the two tags in all timetable in HTML files.
I don't want to insert these tags manually in activity dialog because it is some cumbersome.
Note Liviu Lalescu: in FET-6.4.0 and subsequent versions the activities locked in time are shown in bold
and those locked in space are shown in italic.
246---------------DONE since FET-6.8.0----------------------
247---------------------------------------------------------
From Volker Dirr:
rethink about all used QList stuff in generate.cpp (in FET version 5.28.3)
examples:
Line 293: QList<int>& conflActivities
conflActivities is used only to check "contains". So isn't a QSet better/faster?
Line 1990:
QList<int> occupiedRoomsList;
it is only used for a foreach. So maybe a QStack or QQueue is better/faster?
So maybe all should be rechecked.
Liviu: You are right. The first part is more important, but I also need the
same order of the conflicting activities, as they are added. So I could
add a QSet and a QList together. But this will require more memory
allocation and operation. I am not sure.
248--------------DONE since FET-5.41.0 on 2019-11-20--------
249---------------------------------------------------------
From Handaya:
DONE since FET-5.29.0 on 15 March 2016 --> 1) <-- DONE
2) what if the colors be the same for the same teacher ?
3) what if the program allows marking a weekly meeting for all teachers
without printing every name in the cell of timetable result ?
4) what if the timetable result be printable or saveable in some diferent
formats like doc and pdf ?
Liviu:
DONE since FET-5.29.0 on 15 March 2016 --> (1) <-- DONE
(2) - In the interface, the colors are the same for the same
subject/subject+students set. This is what we came to after some
thinking.
(3) - This would be possible, but I would need to keep in the .fet data
file an attribute which does not belong to timetabling, and I prefer
not to.
(4) - .doc and .pdf - you could print the timetable to a pdf file, or
copy/paste the HTML code to a doc file.
250--------------------------DONE---------------------------
251---------------------------------------------------------
From Bobby Wise:
I suggest that perhaps an additional printout be added that displays
all the teachers that are not occupied in a particular period.
So it is basically a Free Teacher timetable printout, but it does not have
any comments like "Must come earlier" or "Single gap", it just displays the
names of all the teachers who are not working in that period.
252--------------------------DONE---------------------------
253----------------DONE in FET-6.27.0-----------------------
254---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
j'ai deux suggestions:
la première:
pourquoi ne ajouter dans le dossier fet-results, un fichier qui permet de savoir les horaires des salles vide?
ce fichier va aider a mieux contrôler l'énergie électrique en éteignant la lumière le temps que ces salles soit vides.
la deuxième:
cette opération qui ce fait maintenant de façon manuelle. peut on la rendre automatique via un logicielle lié a FET?
I have two suggestions:
the first:
why not add in the folder fet-results, file that lets you know the times of empty rooms? as the file: Teachers Free Periods
This file will help better control the electric power by turning off the light as long as these rooms is empty.
the second:
this operation that now done manually. can we make it automatic via a software related to FET?
Volker Dirr:
about first suggestion:
Rooms Free Periods: In my opinion only needed if you want to swap a room. I think i can add it if Liviu agree.
On the other hand you can already do it today with TiTiTo (selecting empty rooms; swap rooms; ...)
Also: in my opinion your suggestion doesn't help saving electric power. Only if you are able to control electric from distance or if there is a guy that always run through all rooms.
We save electric power very easy: We simply print the room table and put it on the door. So every teacher ans students can see if nobody will use the room in the next hour(s) and so they can turn off the light.
about second suggestion:
i am not sure about what exactly you are talking. about printing free rooms table? see previous answer. Or about swapping a room? see previous answer? Or do you talk about something different?
255---------------------------------------------------------
From math user (on forum):
It would be great if "teachers", "subjects", ... would be customizable (settings). For universities "lecturers" and so on.
256---------------------------------------------------------
From ChicagoPianoTuner:
I have a feature request for FET: in the timetables menu after a successful
generation, there is a button to "lock/unlock" all activities when I'm
looking at a particular subgroup or teacher or room. If I click it, all
activities lock, and clicking again unlocks. I would prefer two separate
buttons, one for lock and one for unlock. The reason is sometimes I have 4
subgroups where they share many activities (but not all activities), and I
want to lock all activities for that particular group (or year) but cannot
do it all at once.
Liviu:
Unfortunately, there is not enough space in that dialog. But you can use the
timetable view time horizontal views.
257----------DONE in FET-6.19.1, on 1 April 2024------------
258---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
FET can really import and export almost all data. except constraints. if this function can be done with FET, it will help save a lot of valuable time, and also allow a FET to communicate with other software..
Liviu: It is a bit weird to export the constraints - what format to choose?
Also suggested by Thaneswer Patel, on forum.
259---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
write directly into cells Activity planning, especially for the activities which are not divided (not split).
for the activities that are divided, we can momentarily kept the weight by default (95%), and later change it if we want.
260----------------------DONE-------------------------------
261---------------------------------------------------------
From Volker Dirr:
a second rooms statistic:
print all activities with the (maybe) used rooms.
but only an unordered list will be "bad" to read/check.
so there should be a not only a simple list.
there should be a filter to check faster.
so filter all activities by subject, teacher or students set.
262---------------------------------------------------------
From Volker Dirr:
add a new column in "fet -> Statistics -> Teachers Statistics"
the column get the name "teachers qualification".
so the user can see the data that he entered.
and:
add a new column in "fet -> Statistics -> Subjects Statistics"
the column get the name "teachers qualification".
so the user can see the the data that he entered (indirectly).
263---------------------------------------------------------
From math user (on forum):
math user: It would be great if components / subactivities always get the same room (option).
Liviu: You have the constraint activities occupy max 1 different rooms.
math user: Yes, that is exactly how I have solved it. But I have to enter a condition for each activity
(lots of conditions). Therefore a (global) setting "same room for all components of an activity" would be nice.
264---------------------------------------------------------
From Volker Dirr:
at the end of the generating algorithm, so after all activities are
placed (but before locking the activities?!) there should be a simple
algorithm that cares about rooms "bugs". this algorithm must not be
perfect, it should only fix "bad" stuff.
1) check if there is an activity without a room, even if it is got a space
constraint with weight less then 100%
2) if there is an activity with a room, it should check if it is
possible to place a smaller room to this activity
3) maybe repeat step 2 a few times to get a better result. (the result
might not be perfect, but it is ok.)
265---------------------------------------------------------
From math user (on forum):
It would be great if the user could change the default values for width and height (disabled and 8ex) in the settings: enable/disable and enter values (default: 8 and 8).
Like that, the user does not have to change the values manually after each generation.
266---------------------------------------------------------
From Volker Dirr:
Generating a difficult timetable shows 28 h... . Should it show 1 d 4 h... ?
267---------------------------------------------------------
From daltinkurt (on forum):
A constraint min days between activities, with force consecutive if same day = true. Can (should) two activities if on the same day span over a break?
268--------------DONE?--------------------------------------
From Volker Dirr:
maybe we can add a check for this:
teacher max hours per day is lower than activity duration.
269-------DONE since FET-5.34.0-(26 October 2017)-----------
270---------------------------------------------------------
From auriolar (on forum):
It would be nice to be able to limit the time a teacher is in the school.
I mean, having, for instance, 5 days and 6 hours/day, I would like to have teachers no more than 25 hours each week in the school gaps included.
This asumes that the timetable is continuous each day, so if I have only class at the first hour and other at the last one, I've been 6 hours (not 2).
I don't think max gaps per week will work (30-25=5), because some teachers have to be less than 25 hours, and those should have more than 5 gaps.
Liviu Lalescu: It would be possible for the user to just consider the working hours for each teacher and add a corresponding max gaps per week
for each teacher (a solution which you partially imply).
271---------------------------------------------------------
From auriolar (on forum):
I think it would be a good idea to have tags for teachers, this way we could add constraints to groups of teachers instead of doing one by one.
Maybe it could be done for rooms to.
272---------------------------------------------------------
From Bob Hairgrove (on forum):
When I generate a timetable, I can successfully save it in CSV format. However, if I do not generate a timetable but open a .FET file from a previous session, it will export all of the data but without without any planned activities because "no timetable has been generated". So if I want to have CSV timetables, I have to remember to export them immediately after they have been generated.
This would be a nice feature to have since there is the schedule contained in the "{Name}_activities.xml" file, and the export routine would only have to read it.
Or is there a better way?
Liviu Lalescu: Did you notice that there is a file name_data_and_timetable.fet in the results? You can open this file and generate on it - it will go very fast, and after that you can export the CSV results.
273---------------------------DONE--------------------------
274---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
Sometimes you need to see the "Activity tags" in tables produced by FET, but the tables are becoming so large; then the idea that surprises us right now is: why not allow the user to select only the "Activity tags" that wants to print ?.
If this feature is created, the tables will be lightweight, and easy to read.
275---------------------------------------------------------
From Anton Anthofer (see also item #151):
- remove the "modify subactivity" menu and move that feature into the "normal" activity menu.
- modify the id
- recalculate the ids
- a complex calculation of the number of students.
- generate very similar timetables
276---------------------------------------------------------
From Volker Dirr:
a) Add also conflicting activities into
activitiesConflictingPercentage if there is a constraint with:
activities with min days between activities and weight 100%
two grouped activities with weight 100%
two consecutive activities with weight 100%
two ordered activities with weight 100%
min gaps between activities with weight 100%
b) Check if it speedups if there is a QList/QSet timetable[hours_per_week] and
checking the activitiesConflictingPercentage at the very beginning.
because activitiesConflictingPercentage contains a lot of constraints.
Liviu Lalescu: I think this is impossible/infeasible.
277---------------------------------------------------------
From mercurialuser (on forum) (and similar, from JBoss, also on forum):
In a few minutes I will have to stop FET and switch off my computer. I need to change some activity so it is not a problem but is it
possible to "pause" a run and "restart" it later, surviving a pc reboot?
From JBoss:
I was wondering if it was possible to stop and resume (at a later time) the generation of a timetable, for example if one needs badly
to switch off the PC but doesn't want to loose the N-hours of elaboration done so far.
(Related to item #196.)
278---------------------------------------------------------
From mercurialuser (on forum):
If you can't change a value (usually a 100% setting, or allow empty days) please disable the widget... it is misleading...
Rewording by mercurialuser:
There are some constraints that must have the % field set to 100. Unfortunately the field is editable and it causes confusion, expecially for newcomers.
I suggest to keep the field on screen but just disable it, make it not editable...
279---------------------------------------------------------
From mrtvillaret (on forum):
In the add constraint teacher not available dialog mark with "b" the slots in which there is a global break.
Liviu Lalescu: also in students set or room not available and activity(ies) preferred times?
280---------------------------------------------------------
From Lizio (on forum):
It could be helpful to put disable and enable buttons in every windows about constraints, not only in the "All" ones.
DONE-->It could be helpful too to put those buttons also on windows about activities.
281--------PARTIALLY DONE IN FET-6.11.0 on 23 October 2023--
From Lizio (on forum):
I think it could be very helpful to let multiple selection in every window about data and constraints.
In this way you can select some of them to apply actions with buttons.
282---------------------------------------------------------
From Volker Dirr:
Volker provided code for a faster generation if one uses constraints room not available times. But it is too risky for now.
Maybe in the future.
Volker: Disalow timeslots of activities if a room is not available.
Volker's code:
...
Matrix2D<double> notAllowedTimesPercentages;
Matrix2D<double> notAllowedTimesPercentagesFromSpaceConstraints;
//breaks are no gaps - I keep track of this
//bool breakTime[MAX_HOURS_PER_WEEK];
...
...
t=computeActivitiesRoomsPreferences(parent);
if(!t)
return false;
//Before computeFixedActivities(...)
t=computeNotAllowedTimesPercentagesFromSpaceConstraints(parent);
if(!t)
return false;
//////////////////
/////////buildings
t=computeMaxBuildingChangesPerDayForStudents(parent);
if(!t)
return false;
...
...
bool computeNotAllowedTimesPercentagesFromSpaceConstraints(QWidget* parent)
{
Q_UNUSED(parent);
//Speed improvement (start) by Volker Dirr
notAllowedTimesPercentagesFromSpaceConstraints.resize(gt.rules.nInternalActivities, gt.rules.nHoursPerWeek);
//TODO: check if this is correct
for(int i=0; i<gt.rules.nInternalActivities; i++){
for(int hour=0; hour<gt.rules.nHoursPerWeek; hour++){
notAllowedTimesPercentagesFromSpaceConstraints[i][hour]=-1;
}
}
for(int i=0; i<gt.rules.nInternalActivities; i++){
if(!unspecifiedPreferredRoom[i]){
bool roomsWithWeight100Found=false;
QSet<int> allowedRoomsSet;
for(int kk=0; kk<activitiesPreferredRoomsList[i].count(); kk++){
PreferredRoomsItem& it=activitiesPreferredRoomsList[i][kk];
if(it.percentage==100){
if(!roomsWithWeight100Found){
allowedRoomsSet=it.preferredRooms;
roomsWithWeight100Found=true;
}
else{
allowedRoomsSet.intersect(it.preferredRooms);
}
}
}
if(roomsWithWeight100Found){
if(!allowedRoomsSet.isEmpty()){
for(int hour=0; hour<gt.rules.nHoursPerWeek; hour++){
bool noRoomAvailable=true;
foreach(int room, allowedRoomsSet){
if(notAllowedRoomTimePercentages[room][hour]!=100){
noRoomAvailable=false;
break;
}
}
if(noRoomAvailable){
if(notAllowedTimesPercentagesFromSpaceConstraints[i][hour]!=100){
notAllowedTimesPercentagesFromSpaceConstraints[i][hour]=100;
}
}
}
} else {
//TODO report a warning. There is no allowed slot at all
}
}
}
else{
if(!unspecifiedHomeRoom[i]){
if(activitiesHomeRoomsPercentage[i]==100){
for(int hour=0; hour<gt.rules.nHoursPerWeek; hour++){
bool noRoomAvailable=true;
foreach(int room, activitiesHomeRoomsHomeRooms[i]){
if(notAllowedRoomTimePercentages[room][hour]!=100){
noRoomAvailable=false;
break;
}
}
if(noRoomAvailable){
if(notAllowedTimesPercentagesFromSpaceConstraints[i][hour]!=100){
notAllowedTimesPercentagesFromSpaceConstraints[i][hour]=100;
}
}
}
}
}
}
}
//Speed improvement (end) by Volker Dirr
return true;
}
bool computeMinDays(QWidget* parent)
...
...
bool computeFixedActivities(QWidget* parent)
{
bool ok=true;
for(int ai=0; ai<gt.rules.nInternalActivities; ai++){
int notAllowedSlots=0;
for(int tim=0; tim<gt.rules.nHoursPerWeek; tim++)
if(notAllowedTimesPercentages[ai][tim]==100 || notAllowedTimesPercentagesFromSpaceConstraints[ai][tim]==100)
notAllowedSlots++;
if(notAllowedSlots==gt.rules.nHoursPerWeek){
...
...
s+=GeneratePreTranslate::tr("End - the order of activities (id-s)");
s+="\n";
initialOrderOfActivities=s;
if(initialOrderStream!=nullptr){
(*initialOrderStream)<<s;
(*initialOrderStream).flush();
}
//After computing the initial order, because it is already taken care of.
//Speed improvement (start) by Volker Dirr
for(int i=0; i<gt.rules.nInternalActivities; i++)
for(int t=0; t<gt.rules.nHoursPerWeek; t++)
if(notAllowedTimesPercentagesFromSpaceConstraints[i][t]==100)
notAllowedTimesPercentages[i][t]=100;
//Speed improvement (end) by Volker Dirr
}
...
283--------------DONE since FET-5.41.0 (2019-11-16)---------
284---------------------------------------------------------
From alienglow (on forum):
Could you please add a setting to display the full file path of the data file in the title bar.
e.g. Instead of showing just "datafile.fet" if there can be a setting to display "D:\Data\FET\datafile.fet".
You can also think of doing this via a status bar, where if possible more info can be displayed.
For the statusbar you can have display options like - data file name, current output directory etc.
285---------------------------------------------------------
From mercurialuser (on forum):
In order to avoid that 3rd grade classes with 10h subject (3 2 2 1 1 1 or variants as we spoke in other thread) have more than 3 hours in one day I add a tag MAX3 to all that activities.
I then added a "TEACHER max hour per day with a tag" constraint set to 3.
All the test run with (where I disable the most strict constraints) completed the timetable.
When all the constraints were enabled, no way to go upper than a value, in all the runs.
I finally traced the problem to a teacher that has 2 10h subjects, so 20 hours... in a 5 days timetable it means at least 4 hours per day....
I moved the constraint to Students....
I think that this condition can be found at pre-compute... sum of the hours of all the splits with the tags / number of working days should be <= max daily hour with tag
286----------------------DONE since FET 6.8.0---------------
287---------------------------------------------------------
From Davide Cottignoli (on forum):
Is it possible to add a lock/unlock menu for all activities placed in a specific building and a lock/unlock menu for all activities with a specific key?
This can speed up manual adjustment when a timetable is generated and, virtually, can speed up the locks for any activities aggregation.
288---------------------------------------------------------
From Devrim Altınkurt (on forum):
think, maybe you can think about only place AN ACTIVITY (not two acts / subacts) over a break.
i know it is difficult problem. but i know there are other schools which want you do this in Turkey.
maybe you add an option ([ X ] can place over a break) for each activity (not subacts)
and the users can choice if the lesson place like this or not.
289---------------------------------------------------------
From Davide Cottignoli (on forum):
He suggests that it is possible for the user to change from locked time to permanently locked time and viceversa, and from
locked space to permanently locked space and viceversa, from the timetable view dialogs, by selecting cells.
290---------------------------------------------------------
From Devrim Altınkurt (on forum):
i think there is a bug about "Activity tag preferred room(s)" constraint.
i attached a fet file. you can take a look at it.
bug steps:
time table: 1 day and 12 hours
added some lessons, student groups, ...
added 13 activities with 1 hour to different subgroups and subjects
added a tag to all activities
added an "Activity tag preferred room(s)" with this tag and one room.
there is not enough room but FET don't detect this.
Liviu Lalescu:
It is not a bug, it is more like a suggestion.
291---------------------------------------------------------
From thanhnambkhn (on forum):
When investigating Fet command line source code, I see there are 2 types of return value: return 0 or 1 (fet.cpp), therein:
- Value "1" means error (can not generate time table) always.
- But value "0" somewhere mean success, but somewhere mean error (when time exceed or abort). (fet.cpp - line 1380)
I think, "0" should mean "success" only. In order to do that, we should add "return 2;" when time exceed or abort. (fet.cpp - if/else - line 1239)
Liviu: I consider that my way of treating this is better.
292---------------------------------------------------------
From Malamojka (on forum):
Notebook:
1. Could you add something like "Notepad" where you could write down various comments for yourself for current version of a timetable. It could be opened all the time and saved when you save the timetable.
2. I really like "comments" of each activity, but I miss a possibility to add a comment when you create an activity (you have to create it, then go to Data/Activities, find the activity and then add comment.
3. DONE? As I said, I really like comments, so I'm also missing a shortcut to create a comment on Time/Space constraints: I would like to be able to add comment, when I add a constraint (now I have to filter/find a constraint in Time/All or Space/All and then add a comment).
293----------------DONE?------------------------------------
From Malamojka (on forum):
I was looking for a way to "hide" some of tags in the timetable (I want some to be visible, but not all). As far as I can see you can do this by changing a certain file in program data folders. I was wondering if the same could be done by, say, naming tag "not wanted tag" in form "(*not wanted tag*)" (so basically adding (* in front of a tag name and *) at the end of tag name). So a tag of that form wouldn't be seen in timetable html. If a solution like that already exists, then I apologize (it didn't exist the last time I checked). Please let me know.
Liviu, 2024-01-21: Isn't it done a long time ago, not printable option of an activity tag?
294---------------------------------------------------------
From Malamojka (on forum):
When you generate a timetable, you have to select output directory in Settings/Select output directory. Could there be a possibility you could check/choose, so "Output directory" would automatically be directory, where your *.fet file is saved.
295---------------------------------------------------------
From Malamojka (on forum):
Four suggestions on constraints:
1. Would it be possible to add: space -> Activities -> An activity has a preferred building. It would help me a lot.
2. Could you add: time -> Activities -> An activity either starts or ends students day (for when they don't actually do the activity for the entire semester)?
3. Is it possible to have variable weight on teachers not available time (for their ideal time, set at maybe 99%)?
4. Could you add: space -> Activities -> A set of activities has a set of preferred rooms? (there are several subjects with a certain tag that I want in just a few rooms).
Liviu:
1. You can add a new tag, then constraint activity tag preferred rooms, then add this tag to all implied activities. It should be easy.
2. No. It is impossible to add in the algorithm. Maybe you could duplicate the students set and add all the activities which are taken the entire semester. This way, if the duplicated students set has max gaps 0, it will force what you want.
3. Please use constraint activities preferred time slots.
4. Activities preferred room(s) is not possible (the constraints are not correctly understood when you mix subject preferred room(s) with teacher preferred room(s)). But why don't you use subject+activity tag preferred room(s) or activity tag preferred room(s)? You can add more tags and constraints for an activity.
For point 2. please see also item #364.
296---------------------------------------------------------
From Malamojka (on forum):
My subjects have their own ID for the sake of our system (I'm talking about few activities with same subject and different teachers). Is it possible to import subject names and IDs? We sometime have two subjects with same name but different ID. Timetable for subjects puts those two in same timetable and adding an ID could solve that problem (subjects' timetable could be composed on the basis of subjects IDs and not name).
297---------------------------------------------------------
From thanhnambkhn (on forum):
From my point, I see that FET-cl is very compact (minify) compare to FET-desktop. Most of people care about FET-desktop only, I do not.
I think you should consider design Fet in the future in this way:
- FET-cl is core
+ With many options, apis,
+ Allow to extend or customize but keep work with the official
+ With standard output (xml, json ...)
- FET desktop (or any other App) is only front-end, calls to these Fet-cl 's api.
By this way, FET will able to more useful, and able to use in many cases, many projects. They can use Fet GUI or not. (it is my case)
298---------------------------------------------------------
From canhathuongnhau and Volker Dirr (on forum):
Volker:
The dataset is impossible.
It is very easy to prove that.
Please check teacher T.
That teacher is teaching 24 hours.
Now check his activities. All activities should be in the morning. In the morning are only 5*5=25 free time slots. But you set also 2 breaks in
the morning. So there are only 25-2=23 slots left.
It is impossible to set 24 hours into 23 free slots.
Could we add a test for this?
Liviu:
It is easy to add such a test for such a case, but there are many more other situations in which this test will not work. Like there are more "groups" of
activities, each one with its preferred time slots.
299---------------------------------------------------------
From Volker Dirr:
don't always break/disallow generating if there is a warning at the
beginning. that is pretty bad. sometimes FET gives warnings, even if the
dataset is solveable. (For example if you add an activity tag, but no
activity is using that activity tag). i like that FET is reporting this
potential bug. But the FET behavior is bad, since
it shouldn't disallow generating.
also maybe rethink about printing all warnings into a single
string/editor. since by this i can copy and paste those warnings and fix
them all at one. at the moment i always need to read and fix it always
step by step (because i can't remember always all reported bugs, especially
if i check datasets from other users and or if i can't even read the
characters (Arabic, Russian, ...)
300---------------------------------------------------------
From Jijo Jose:
1. Export the result to Excel format
2. Add xml dtds for xml display
301---------------------------------------------------------
From Julio González Gil (on forum):
Rephrased by Liviu Lalescu:
We need more preliminary tests for the constraint teacher(s) min hours daily, to avoid
unnecessary work to discover the bugs. For instance, if we have teacher(s) min 2 hours daily
with allow empty days, and:
- The teacher is only available one hour on a day, or
- The teacher has one activity divided into two components, 100% min 1 days between them,
each component having duration 1.
302---------------------------------------------------------
From Volker Dirr:
generate multiple: instead of a fixed max time use a more flexible max
time. "Calculate max X minutes longer than the time the last max
activity was placed" or "Countdown x minutes if no new max placed
activity was found"
so for example thre is a countdown timelimit with 5 minutes.
as soon as a new max placed activity was found the counter restarts at 5
minutes.
so the time limit is 5 minutes.
303---------------------------------------------------------
From Julio González Gil (on forum):
If we are sure that nobody can teach less hours than the global constraint (for all teachers), another option is to mark as unavailable the days for the teacher(s) with problems.
For example if we have "min hours per day = 2" for all teachers, and TeacherA has Wednesday with only one free hour (time slot), it is clear we can mark the whole Wednesday as not available (as it won't be used anyway).
---
Liviu Lalescu: Maybe also for students?
---
Volker Dirr:
a) fet should show a "speed warning" only. so user can modify hisself
or
b) fet should automatically disallow those timeslots for related activities. but this is a bit critical. (i wrote similar stuff for rooms and same starting time constraints but we didn't added it yet, since there where small problems with other example file. i think they only happen since the free time slot check where done after the "set disallowed" even if it must be done before. but that mean we must split that in the source, since currently Liviu done both very close at the same time.)
---
Julio González Gil:
I would go with option A, with a warning for each problem found. In my opinion it's better to allow the user to fix it and least you are sending a warning to the user about the speed (I'd mention that in this case you can even have impossible timetables as it was in my case).
---
Liviu Lalescu:
The code could look like:
for(int d=0; d<gt.rules.nDaysPerWeek; d++){
int nFreeSlotsDay=0;
for(int h=0; h<gt.rules.nHoursPerDay; h++){
if(!teacherNotAvailableDayHour[tc][d][h])
nFreeSlotsDay++;
}
if(nFreeSlotsDay>0 && nFreeSlotsDay<teachersMinHoursDailyMinHours[tc]){
ok=false;
int t=GeneratePreIrreconcilableMessage::mediumConfirmation(parent, GeneratePreTranslate::tr("FET warning"),
GeneratePreTranslate::tr("For teacher %1, the constraint min %2 hours daily is useless on day %3. Please make this "
"teacher not available on this whole day, for performance and better correctness checking.")
.arg(gt.rules.internalTeachersList[tc]->name)
.arg(teachersMinHoursDailyMinHours[tc])
.arg(gt.rules.daysOfTheWeek[d])
,
GeneratePreTranslate::tr("Skip rest"), GeneratePreTranslate::tr("See next"), QString(),
1, 0 );
if(t==0)
return false;
}
}
to be added at the end of the function "bool computeTeachersMinHoursDaily(QWidget* parent)" of file src/engine/generate_pre.cpp.
304-----------------------DONE------------------------------
305-----------------------DONE------------------------------
306---------------------------------------------------------
From Volker Dirr (on forum):
Teacher(s) max gaps continuously (a constraint that limits the number of continuous gaps).
Liviu Lalescu: seems difficult. But you may use a trick: add a dummy activity with duration 1 for each allowed gap for the teacher,
with activity tag "gaps", then make max gaps per week for that teacher 0, then use constraint teacher max hours continuously
with activity tag "gaps".
Volker Dirr:
The workaround is fine for the full time teachers at my school; but it is bad for part time teachers, since the workaround affects
also the min/max number of hours per day and also the number of days per week.
307---------------------------------------------------------
From math user (on forum):
The links to each table (#table_12) are great.
The only problem is that the link for a certain teacher changes when another teacher is added or removed.
---
Why not keep #table_12 and so on and just make them permanent (associated to a certain teacher, group, room, ...)?
Say #table_12 belongs to teacher Abc: The ID #table_12 is stored for this teacher. Suppose the last stored ID is #table_50.
Adding a new teacher will result in ID #table_51 being associated with that teacher, and so on.
Removing say teacher with ID #table_34 will make no changes, i.e. the next new teacher gets ID #table_52.
There should be a setting to change between consecutive IDs (default - as in the current version) and permenent IDs (my suggestion).
When switching from permanent to consecutive, all IDs are reallocated when the timetable is generated.
---
Liviu Lalescu:
Unfortunately, I think this is (very?) complicated.
---
Rodolfo Ribeiro Gomes:
Maybe a hash of room name?
table_roomXYZ where XYZ is a hash?
---
Liviu Lalescu:
I thought of this, too. But there might appear conflicts, and solving them is not easy. Also, numbers are nicer than a hash value.
---
Rodolfo Ribeiro Gomes:
Another option is to convert room/subject/teacher/etc. name to URL encoding? Like http://doc.qt.io/qt-5/qurl.html#toPercentEncoding
---
Volker Dirr:
that will avoid duplicates.
advantage is the permanent link.
disadvantages are that Arabic (and other) users will have trouble to read it and the file size will grow.
---
Liviu Lalescu:
I think white spaces should also be encoded, which is not done by default?
But I would not like to implement this in the official version. I prefer the numbers, they are much shorter and nicer. And maybe safer.
I can add this in the TODO, and if more people ask, I will reconsider.
308---------------------------------------------------------
From math user (on forum):
He refers to the all time/space constraints dialogs:
What about CTRL+F to select Filter and CTRL+G to select Sorted? That would speed up usage (keyboard only - no mouse needed).
309---------------------------------------------------------
From Rodolfo Ribeiro Gomes (on forum):
Constraint teacher(s) min continous gaps in window (for instance, the teachers should have 6 continuous gaps on a day, for lunch, when
the FET time slot corresponds in reality 10 minutes).
310---------------------------------------------------------
From Matsumoto (on forum):
Is LibreOffice exportation planned? Quite a lot of people I present FET to have little to no knowledge about HTML / CSS editing, so being able
to export the timetables in LibreOffice would really help spread FET around my area.
See also item #18
311---------------------------------------------------------
From Matsumoto (on forum):
To help see difficult days/times, FET could have a statistics that shows the amount of available teachers at every period of the timetable,
for example, if only teachers A, B, C and D are available at the first hour of every day, I imagine it should show something like:
Day 1 Day 2 Day 3
Hour 1 4 4 4
Hour 2 6 2 4
I filled in random values for hour 2 just to have more detail
This should allow the user to quickly spot times where more teachers could be needed before the generation starts. Maybe in addition to the
number of teachers also have the names?
From Volker Dirr:
we can skip this dialog, since it is still too much work to check; it
can be improved much more!
add a new (locked) feature:
"check min teachers per slots (except breaks)"
Here a user can enter the number of classes (or: if smaller: the number
of courses).
Than in generate_pre it is always checked by default if that minimum
number is fulfilled or not.
Advantage: you don't always need to check manual
number_of_slots_per_week every time you added/modified a constraint. You
only need to add that number one time and it will always check
automatically.
312---------------------------------------------------------
From Vangelis Karafillidis:
New constraints:
Teacher(s) max span per week;
Teacher(s) min span per day;
Teacher(s) min span per week;
Teacher(s) min gaps per day;
Teacher(s) min gaps per week;
A set of activities has min common time slots with another set of activities ( https://lalescu.ro/liviu/fet/forum/index.php?topic=3101.msg16795#msg16795 )
Also suggested by auriolar, on forum: Teacher(s) max span per week.
313---------------------------------------------------------
From Silver (on forum):
I suggest you add the split and duration in subject window, why we add the split and duration when we add activity for 1st teacher, and for 2nd teacher ... .
With this suggestion, we add the splits and duration 1 time for the subject.
Exmple: Physics1 have 2 split in the week, so why I add this info in every activity for Physics1?!
314-------DONE in FET-6.0.0 and subsequent versions:--------
315------------------DONE-----------------------------------
316---------------------------------------------------------
From math (on forum):
I'm using FET for generating the timetable for the computer science departement of a mid-sized university. In this posting I would like to suggest something that
I call "collection of rooms". Since I'm not a native speaker, please feel free to change this term to whatever seems to be appropriate for you.
We have a wide variety of rooms in our university, ranging from small meeting rooms or seminar rooms up to large lecture halls for hundreds of students. But it's
not only the size of the rooms that is important, it's also the equippment in these rooms. A very important differentiation is the question whether a room is
equipped with a chalk board or a white board. While most lecturers prefer white boards, lecturers of math related courses usually prefer chalk boards.
At the moment I'm first adding all the activities, then usually selecting all appropriate rooms in "Space->Subjects->A Subject has a set of Preferred Rooms".
In case of activities with the same subject but different space requirements, I even have to specify them in "Space->Activities->An Activitiy has a set of
Preferred Rooms" for each of these activities. My problem is exactly the following process of assigning rooms.
When adding such a constraint in "Add subject preferred rooms", I select the subject on the top of the dialog. Below the subject there are two lists. The list
of all available rooms on the left and the list of selected rooms on the right. Now I have to go through the (looooooooong) list of available rooms, selecting
all appropriate rooms. Since I can't remember each and every room, I coded relevant information to the name of a room, e.g. "N3-106-C-SPW-50P" for "room 106
on third floor of building N", "managed by the Computer science department", "Seminar room equipped with Projector and Whiteboard", "capacity for 50 students".
So if I need a mid-sized seminar room, I have to go all through the list, selecting all matching rooms.
First, this manual selection of rooms is quite time consuming. Second, there's a good chance of missing an appropriate room. Second is much worse since we suffer
a general lack of rooms, so that generating a timetable usually fails due to a lack of rooms. So it would be highly helpful if FET could support me in not missing
appropriate rooms.
And I would like to suggest a way that should be easy to implement, not demanding any changes to the timetabling algorithm at all.
I would like to be able to specify collections, e.g. "Data->Space->Collections". When adding a collection, I would like to specify a name of the collection on
the top of the dialog. Below this edit field there could be two list fields (just like in the constraints dialog mentioned above). In the left list there are
all the available room, in the right list field there are all the rooms that are part of the collection. This way I would be abe to generate a collection
"mid-sized seminar room" with all appropriate rooms.
Coming back to the "Space->Subjects->A Subject has a set of Preferred Rooms" dialog. Here, in the left list there are all the available rooms. I beside this
list of rooms, I would like to see all collections at the top of the list. This way I could assign a collection to a subject instead of assigning room by room.
As a matter of fact, I could also select multiple collections or other rooms.
When generating a timetable, these collections could be dissolved by a pre-problem, as Volker called it. A collection is just replaced with the rooms it
contains. If multiple collections were selected and a specific room was listed in more than one of these collections, all duplicates are removed from the list.
This way the algorithm gets the very same input as before, not requiring any changes here.
I would be more than happy if you could add this collection feature to FET.
317---------------------------------------------------------
From math (on forum):
When preparing a timetable generation I specify a bunch of rooms that are appropriate for a given subject and/or activity. Based in this information FET assigns
one of the specified rooms at timetable generation time. However, even though I specify the rooms as appropriate, some of the given rooms are more appropriate
than others.
For instance lecture halls. Some of them are brand new, some of them not. Since both kinds of lecture halls are ok for a lecture, I specify both of them as space
constraint. At generation time FET assigns for room types to the activities since there is no difference from FET's point of view. But when I'm looking to the
generated schedule and see that the lecture is assigned to an old lecture hall while a new lecture hall is available at the same time, I would like to be able to
manually move the activity from the old lecture hall to the new.
I would highly appreciate if such "manual optimization" of rooms would be possible in FET. In fact, this is something that all commercial tools are able to do and
the feature that I miss most in FET.
In my naive way of looking to FET I don't expect this feature to be difficult in implementation. FET knows which rooms are appropriate for an activity and it
knows which of these rooms are already allocated (since the timetable has just been generated). So when right-clicking on an activity in the timetable, a menu
option "change room to..." could appear with a sub menu holding all the available alternative rooms.
I'd be really happy if you could integrate such functionality and I'm a bit afraid that you say something like "sorry dude, this is out of scope since FET does
not focus on post-generation optimization at all".
318-------------------DONE since FET-6.0.0------------------
319--------------DONE???------------------------------------
From Vangelis Karafillidis:
Two activities are not consecutive. For example A1 and A2 are not consecutive means that FET forces the A2 activity not to be placed immediately after A1.
(But A1 may be placed immediately after A2).
Vangelis suggested that this can be solved by using a trick: It can be achieved indirectly with pseudo-activities. let's say A1 real activity,
P1 pseudo-activity, and A2 real activity. If you want A1 and A2 not to be consecutive, you can demand A1 and P1 to be consecutive and A2 not to overlap with P1.
Liviu, 2024-01-21: isn't this done a long time ago, min gaps between ordered pair of activity tags?
320--------------PARTIALLY DONE-----------------------------
From Volker Dirr:
get rid of max_days_per_week and max_hours_per_day.
one needed step for that is redesigning the interface, since the
interface use it.
it won't be too difficult to fix that.
just add hours per day and days per week as a QStringList (like teacher
names, subject names, ...)
this dialog should get buttons like in teachers, rooms, subjects, ...
so add a button with "up" and "down" to move the name.
"rename"
"clear all"
"delete"
"add"
the hours per day dialog should maybe also get a button with a spinbox
to add X names at once.
Like name "1", "2", ...
or "1.", "2.", ...
or ...
the days per week dialog should get 3 buttons like:
"add Monday to Friday" (so it add those 5 days. if you press that button
again, it should add once again. so there will be 10 days added (maybe
with an attached small string).
"add Monday to Saturday"
"add Monday to Sunday"
"add From a date To a date" So you can select 2 calender dates and it
just add all that dates.
321---------------------------------------------------------
From Vangelis Karafillidis:
These new views of FET (teachers/students time horizontal) for modifying an existing timetable seem to work very well. Some more suggestions mainly for facilitating
the modifications of an existing timetable... The code actually exists! Just to be "connected" to these windows (views).
Teachers view:
1) When right-clicking on the name of a teacher (left column), a menu opens. The options are the constraints (time, room, etc) for the specific teacher. For example,
teacher available times, max days per week, home room etc.
2) When right-clicking on an activity (in the timetable), a menu with two sub-menus opens. The first sub-menu has the options of modifying the specific activity.
The second sub-menu is actually all the of the time constraints for the specific activity (for example an activity has a preferred starting time, etc).
Students view: The corresponding options for the students, as mentioned above.
I think that the above are necessary. Of course ALL the existing options for the teachers, students etc might be displayed in these menus, when right-clicking.
For example, modifying the data (teacher name, etc). THIS WOULD BE MUCH BETTER, SO ONE COULD MAKE MODIFICATIONS ON ALL FET FIELDS WITHOUT EXISTING THESE WINDOWS.
But, I don't know how complicated this part is. I have no C++ programming skills, but it seems easy.
The above suggested options focus on MODIFYING AN EXISTING TIMETABLE WHICH IS A COMMON PRACTICE IN REAL LIFE SITUATIONS AT SCHOOLS. I KNOW AND I ACCEPT THAT
MATHEMATICALLY AND COMPUTATIONALLY MODIFYING AN EXISTING TIMETABLE IT'S NOT THE BEST APPROACH.
Liviu Lalescu:
Your suggestions are not so easy to implement.
322---------------------------------------------------------
From Vangelis Karafillidis:
After testing the new display (mainly teachers time horizontal) for partially modifying an existing timetable, I thought of a suggestion. Most likely, it's
similar to "remove redundant constraints". The suggestion is to add a (percentage) multiplication factor for each one of the "groups" or time constraints.
This means that the user should be able to add a different multiplication factor for each one of the following groups of constraints: Teachers' time constraints
(for example 98%) Students' time constraints (for example 90%) Activities time constraints (for example 20%) This would affect ONLY the constraints that can have
weight (percentage) less than 100%. For example, teachers not available times can have ONLY 100% as a percentage. These constraints are not going to be affected.
But, all the other constraints (for example: teachers max gaps per day, max hours continuously) are going to be affected since they are going to be multiplied
by this factor. For example if there is a constraint for the TEACHER_1 such as max hours continuously = 3, weight = 100%, it is going to be now 98%.
If there is a constraint teacher max gaps per day = 1, weight = 98%, the new weight would become 96,04% (98%x98%). This should (more or less) relax these
constraints, so a temporary timetable is going to be solvable, with roughly similar (to identical) characteristics to the initial one. I don't know if the
above can be easily coded... It might be difficult.... But this was what I thought for facilitating the generation of a temporary timetable by slightly
modifying the existing one.
Liviu Lalescu:
I do not agree with this idea. But I added it in the TODO.
Please note that max gaps per week/day for students/teachers constraints can only have 100% weight.
323------------DONE FOR TEACHERS AND STUDENTS IN FET-6.11.0-
From Vangelis Karafillidis:
He suggests that all the constraints teacher not available could be presented in a teachers time horizontal manner (teacher as row, day+hour as column).
Further suggestions:
Generally speaking, the interaction with the GUI is crucial. Most users need easiness in entering and modifying data and of course a good monitoring of them.
Under this perspective, I'm suggesting the following enhancements regarding the GUI of FET, which -in no case- have any connection with drag-and-drop-like features.
Teacher's not available times: The teachers time horizontal view would be much more flexible
a) The user could monitor at once all teachers
b) The user could easily modify this constraint for more than one teachers at once. For example, if a group of teachers (the mathematicians) should finish their
lessons the latest on the 4th hour on Monday, the user could easily select these "cells" (time slots) and enter his/her data. In the same way, when all teachers
are not available (for example) for the last hour of Monday (this happens at the beginning of the school year at Greek schools, because many teachers are "missing",
and therefore schools don't "expand" their timetables until the last hour of each day), the user could easily select the entire column at once and make all teachers
not available for this specific hour.
Student's not available times: For similar reasons the time horizontal view is by far more flexible.
Please bear in mind that with the existing FET GUI the user needs severely more time in order to complete these tasks. Also, it's really hard for the user to monitor
his/her data efficiently (with the existing GUI).
Interaction of the above "dialogues" with statistics: An example for the teachers: Let's suppose that a teacher teachers for 20 hours per week (this is the most
typical situation at Greek schools). The user might accidentally make this teacher available for a very small number of hours, and therefore the timetable generation
might become impossible. I suggest to add two columns (in this time horizontal view) right to the teachers' names. The first column should take the number of activities
(from the statistics) and the second column should display the number of available hour of this teacher. This (second column) should be "interactive", i.e. when the user
adds or removes an hour, this number should change.
An example for the students: The same for the students...
Similar interactions might be useful for the space constraints, but since I've never had such constraints in my timetables, I can't judge and suggest what would work
better than the existing displays of FET. Most likely, the room's not available times works better in the time horizontal view, so the user will have complete control
on his/her data.
For rooms not available times constraints, since a room may have weight <100%, Vangelis proposes this: By default, the cell should take the weight 100%, and if one
needs something different, right click and a dialogue with the new weight and instead of "X" for rooms you might display the percentage itself in red color.
324---------------------------------------------------------
From Rodolfo Ribeiro Gomes (on forum):
Add short names for teachers (and maybe students, subjects, activity tags, rooms).
See also item #199.
325---------------------------------------------------------
From Darren McDonald (on forum):
I thought I'd make a few feature feature requests that may be useful (at least they would be useful to me! :) ). This one is the more difficult of the two.
I've often got a group of activities that need to have the same starting time, for example
Mathematical Studies 1 (1+1+1)
Mathematical Studies 2 (1+1+1)
Mathematics SL 1 (1+1+1)
Mathematics SL 2 (1+1+1)
Mathematics HL (1+1+1+1)
I can use Time>Activities>A set of activities has same starting time (day+hour), but this requires three separate entries (one for the first subactivity of
each subject, one for the second subactivity, and one for the third, with the final Mathematics HL subactivity left free), where each constraint involves
a list of 5 subactivities (which increases the possibility of error).
Is it possible to introduce a new time constraint that would allow me to constrain, for example, the first n activities of a group of activities? Essentially,
I'd like to be able to specify the time constraint(s) above in a single step: providing FET with the relevant activity sets, and then specify that (in this case)
the first 3 subactivities should have the same start time (day+hour).
326---------------------------------------------------------
From Darren McDonald (on forum):
When creating timetables for students in the final two years of high school, I typically use student names as Groups. Within the first couple of months
(particularly in International Baccalaureate Diploma Programme schools), there are often a number of changes as students change subject choices.
It would be easier to find student names (to remove them from one activity group, then add them to another) if there were a button that would allow me to sort
the selected groups from the Modify Activity screen (perhaps below the Clear button?).
327---------------------------------------------------------
From Zsolt Udvari (on forum):
Add a subject tag for each subject (like: "easy" or "hard") and add time constraints for these subject tags.
328---------------------------------------------------------
From Valdo (on forum):
Export the resulted timetables in time horizontal form.
329-----------------------DONE------------------------------
330---------------------------------------------------------
From Volker Dirr:
Maybe this is a good time to restart coding csv stuff.
my old csv stuff was very "powerful" and "compressed", but sadly also
very bad "expandable"/(coded).
also other guys asked for exporting other time constraints. nearly
impossible to add that into the old code.
so i suggest this:
- we keep the old csv stuff, so everyone can still use this "powerful"
feature. it will be also stable (never change the file format anymore).
- we add a new csv export (and also import). maybe call it "version 2"
or "beta" or "experimental" or ...
- the new code will NOT be able to select the order of the fields (and
also not be able to select headers, textquotes and field separator; even
i will do that maybe in the source)
- the first version will be similar to the current default export. so
just code simplification.
- then i will have got the chance to add new features into that code
(like exporting other constraints)
331---------------------------------------------------------
From Zsolt Udvari (on forum):
My days originally have had 7 hours. The school said a thing and I thought I should include a plus hour, before the original 7 hours.
I added it (0. hour) and I saw the hour of all time constraints updated: increased by 1.
I know many times it's a good feature but in my case (I've record all activities, time constraints) hasn't increase. My 0. hour is like a virtual hour.
Now I can manually rewrite the .fet file but I think it would be nice when user can disable this feature - maybe FET ask about it the user when add later
(means there are time constraints) a new hour.
332---------------------------------------------------------
From Zsolt Udvari (on forum):
Maybe a user error (PEBKAC) but I think I share it.
So I've a little complicated FET-file and it seems the "An activity has a preferred starting time" doesn't work.
I attached the file and try to generate and check:
Nr. 895 and 896 activities (without any teacher and student)
They have preferred starting time: "Szerda 1." (Wednesday) and "Hétfő 3." (Monday) with 100%
They have same starting time (day+hour) with 7 other activites (for example 647 and 648)
Generate (without success)
Check the student's timetable, go to "11A" and the 647 is on "Péntek" (Friday)!
333---------------------------------------------------------
From Valdo (on forum):
A new addition to Spreading activities uniformly in the week for activities split in to 2 components:
Constraints max days between activities (2 components) with the possibility to select max days and weight.
334---------------------------------------------------------
From Zsolt Udvari (on forum):
I try to find the impossible constraint(s) in my FET-file and I think it's uncomfortable that only on "Time/All" dialog can activate/deactivate the constraints.
I think it would be nice when can activate/deactivate for example on "An activity has a preferred starting time" dialog (and on the others too).
335-------------PARTIALLY DONE?-----------------------------
From Volker Dirr:
There are not many variables to mutex in the generation.cpp. So it will
be faster to use std::atomic or QAtomic command instead of using mutex.
(The atomic commands will do a mutex if the cpu doesn't support atomic
operations. so cpus without atomic support won't generate faster, but
other cpus will.)
336---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
Constraint min working hours in an interval.
This constraint is very useful in many situations such as, for example, not bringing a teacher (or all teachers) for a single hour in a given interval.
337---------------------------------------------------------
From Fernando A F Lordão (on forum):
After testing the new feature (showing the number of assigned hours for teachers and students in the HTML statistics of the timetables) I figured out about
another situation that occurs in my institution.
Here we have a rule that recommends coordinators not to assign more than three different subjects to one teacher. Sometimes it occurs, but it's not the ideal scenario.
So, I thought about including two more columns in the statistics file:
* "Total of Activities"
* "Different Subjects" (counting different string description of the subjects assigned to the teacher)
338---------------------------------------------------------
From mercurialuser (on forum):
I'd like to have fet-cl write the highest timetable without stopping the program. I'm getting 63x out of 639 activity placed and so I'd like to see what it is
happening, which activity is blocked by which constraint, etc etc..
It would be nice to be able to load the saved partial timetable and restart the search from that point... of course, I'd modify the constraints to be able to
place the remaining activities...
Liviu Lalescu:
For part 1) It is difficult, because I cannot rely on more signals. I already use SIGTERM.
But I think you can safely interrupt the generation with SIGTERM and get the highest stage timetable. It would not be useful to continue the generation.
If you change a constraints, the whole procedure changes (see your second request and my answer, below). You can see the initial activities order in the
logs, and the maximum placed activities. The next one after the maximum placed is problematic.
For part 2) This would not be possible. If you modify the constraints, the whole thing is changed.
339---------------------------------------------------------
From Roberto Bergonzini:
Manual timetabling - drag and drop.
Just make a timetable view teachers, keeping only the free days and the not available constraints for the teachers.
Also suggested by mercurialuser.
Forum link: https://lalescu.ro/liviu/fet/forum/index.php?topic=3461.0
340---------------------------------------------------------
From Emiliano Llano Díaz:
Improvement suggestion: Is a nag that each time you open FET it does not "remember" the file it was working on (I know it is just 2 clicks away on
file->open recent, but... you know humans are lazy 😁 )
341--------DONE in FET-6.13.0 on 14 November 2023-----------
342---------------------------------------------------------
From Vangelis Karafillidis:
All students must respect the maximum number of span (in hours) per day -> better write:
All students must respect the maximum span (in number of hours) per day.
Circular -> better write: Circularly.
343------------------DONE-----------------------------------
344---------------------------------------------------------
From V Paul C Charlesraj (on forum):
Minimum number of days in a week for all students.
Liviu:
Or for a students set. This is very difficult to implement perfectly (to take care of combinations with the other constraints).
345---------------------------------------------------------
From Rodolfo Ribeiro Gomes:
(referring to translation of plural forms)
I also saw this in daysform.cpp :
if(cnt_rem>0){
s+=tr("%1 constraints will be removed.", "%1 is the number
of constraints").arg(cnt_rem);
s+=" ";
}
if(cnt_mod>0){
s+=tr("%1 constraints will be modified.", "%1 is the
number of constraints").arg(cnt_mod);
s+=" ";
}
s+=tr("Do you want to continue?");
Maybe this part could use %n too?
Liviu Lalescu:
Yes, it should, also in hoursform.cpp and also in
alltime/spaceconstraintsform.cpp.
But I think there are plenty of places to modify and it is really too
much. But I'll think of it.
Problem: see for instance alltimeconstraintsform.cpp:
constraintsTextLabel->setText(tr("%1 / %2 time constraints",
"%1 represents the number of visible active time constraints, %2 represents the total number of visible time constraints")
.arg(n_active).arg(visibleTimeConstraintsList.count()));
Which is %n? %1 or %2?
Also advancedlockunlockform.cpp:
QMessageBox::information(&lastConfirmationDialog, tr("FET information"), tr("There were removed %1 locking time constraints and"
" %2 locking space constraints. There were not removed %3 locking time constraints and %4 locking space constraints, because"
" these activities were permanently locked").arg(removedTime).arg(removedSpace).arg(notRemovedTime).arg(notRemovedSpace));
It is very difficult.
I am sorry, but the code is full of such mistakes. It is too late now
to correct.
Rodolfo Ribeiro Gomes:
Difficult indeed.
The only way out I can see would be replace:
"There were removed %1 locking time constraints and %2 locking space
constraints. There were not removed %3 locking time constraints and %4
locking space constraints, because these activities were permanently
locked"
by:
"There were removed %1 and %2. There were not removed %3 and %4,
because these activities were permanently locked"
where %1 would be "%n locking time constraint(s)", etc.
346---------------------------------------------------------
From Taro Tada:
Either allow two or more users to work concurrently on a unique FET file, or allow the merging of two or more .fet files.
347------------------DONE-----------------------------------
348---------------------------------------------------------
From Fernando A F Lordão (on forum):
I would suggest the use of the current filter values as default values when the user presses the "Add" button for constraints.
For instance, I noticed the importance of this when I was inserting teachers time constraints (SCREEN "Constraints teacher not available times"). Let me explain...
As I had many constraints already set inherited from the previous semester, I was firstly filtering by name and modifying the preferences previously saved.
At this moment, when I was filtering by a given name and that name had NO constraints yet, I was forced to "Add" a new constraint to that teacher and several
times I included the constraint with the first name on the list, having so to step back and remove the wrong constraint.
I think this mistake happens because our brain thinks: "I have already chosen the name", but it does NOT take into account that it was on the previous screen.
So, how about we give a hand to the brain and inherit the values from filters to the next "Add" screen.
349----------------DONE-------------------------------------
350---------------------------------------------------------
From aisse (on forum):
I think the program can be improved better if the restrictions are in the form of buttons .. For example, the Algerian version of the middle schools we
need some restrictions only .. I think the format of the program in its Algerian version will be better and easier by buttons pre-programmed .. Where all
buttons are in one interface as long Their number will be small in the Algerian version
For example, we say the Algerian version.. but in reality there are many types of schools and every type what needs. There are middle schools, secondary
schools, primary schools, private schools ..and institutes of very different types. The constraints in the Algerian version are general to all. But when we
come to the privacy of each school, each one needs constraints and it does not need another .. I work in a middle school, I only need some constraints which
can all be put in one interface ..
Liviu Lalescu: So you need a customisable interface (where you can add/remove buttons from the interface)?
aisse: Not exactly .. I suggested reducing the version .. to become " FET for Algerian middle schools...The buttons are fixed.
351---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
in the list of conflicts why not specify the names of hours with the days
ex: ... activity (A1) is in conflict with activity (A2) in Tuesday (2) and Tuesday (4) ...
the numbers (2) and (4) are the names given by the user at the hours.
one of the advantages of this suggestion is to know if the activities are consecutive or not.
Volker Dirr: You also need to see the duration, because you can only know then if they are
consecutive or not.
352---------------------------------------------------------
From Volker Dirr (on forum):
There are constraints like max hours daily or interval max days per week which allow their data to be redundant (they allow n_hours_per_day or
n_days_per_week), and other constraints, like min days between activities, which don't allow their data to be redundant (they allow only
n_days_per_week-1).
Volker suggests to allow only non-redundant data (like min days between activities constraints).
353---------------------------------------------------------
From Volker Dirr:
add a warning before generating (generate_pre.cpp):
check min days between activities constraints:
if ((number_of_activities.count() > 2*days_per_week) &&
forceConsecutive.isEnabled()) => IMPOSSIBLE
354---------------------------------------------------------
From Volker Dirr:
If there are activities in a constraint activities same starting
time and an activity is forbidden a time slot, then all the others are
also forbidden this time slot.
Liviu: It might not be critical, as activities with same starting time constraints are placed one near the other in the initial order
(problems might arise only if the user uses the advanced option "Group activities in the initial order").
355---------------------------------------------------------
From Volker Dirr:
If an activity A has preferred room R and R is not available
on some time slots, make A not available on these time slots.
(See also item #356.)
356---------------------------------------------------------
From Volker Dirr:
Take care of this potential problem: If an activity
A with duration >=2 has preferred two rooms, and in
the first hour R1 is available but R2 not, then in the second hour R2 is
available but R1 not, A is impossible to place.
(See also item #355.)
357---------------------------------------------------------
From Volker Dirr:
The order of the activities is not always good. Activities with a
very low number of available slots might be much too late in the order.
(For example pseudo activities "lunch".)
358---------------------------------------------------------
From Volker Dirr:
Care about not available times if activities are consecutive.
Volker: the code might look like the attached (be careful: not tested much
yet; so it might contain still bugs)
//NEW Variant (start)
foundImprovement=0; //TODO:delete
bool addImprovement=true;
//care about consecutive by Volker Dirr
//TODO: same starting time and consecutive might effect each other. so
repeat both as long as something changed?!
//DO THIS AS LAST
while(addImprovement){
addImprovement=false;
for(int i=0; i<gt.rules.nInternalTimeConstraints; i++){
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_2_ACTIVITIES_CONSECUTIVE){
Constraint2ActivitiesConsecutive*
c2=(Constraint2ActivitiesConsecutive*)gt.rules.internalTimeConstraintsList[i];
if(gt.rules.internalTimeConstraintsList[i]->weightPercentage==100.0){
//if firstActivity or secondActivity has a same starting time, then
it must be recheeckt?!
int firstActivity=c2->firstActivityIndex;
int secondActivity=c2->secondActivityIndex;
for(int d=0; d<gt.rules.nDaysPerWeek; d++){
//get times
int firstPeriodOfFirstActivity=-1;
int lastPeriodOfFirstActivity=gt.rules.nHoursPerDay-1;
int firstPeriodOfSecondActivity=-1;
int lastPeriodOfSecondActivity=gt.rules.nHoursPerDay-1;
for(int h=0; h<gt.rules.nHoursPerDay; h++){
int currentTime=d+h*gt.rules.nDaysPerWeek;
if(notAllowedTimesPercentages[firstActivity][currentTime]!=100){
if(firstPeriodOfFirstActivity==-1)
firstPeriodOfFirstActivity=h;
lastPeriodOfFirstActivity=h;
}
if(notAllowedTimesPercentages[secondActivity][currentTime]!=100){
if(firstPeriodOfSecondActivity==-1)
firstPeriodOfSecondActivity=h;
lastPeriodOfSecondActivity=h;
}
}
assert(lastPeriodOfFirstActivity<gt.rules.nHoursPerDay);
assert(lastPeriodOfSecondActivity<gt.rules.nHoursPerDay);
assert(lastPeriodOfFirstActivity>=firstPeriodOfFirstActivity);
assert(lastPeriodOfSecondActivity>=firstPeriodOfSecondActivity);
int durationFirstActivity =
gt.rules.internalActivitiesList[firstActivity].duration;
if((firstPeriodOfFirstActivity>=0) &&
(firstPeriodOfSecondActivity>=0)){
if(lastPeriodOfFirstActivity==lastPeriodOfSecondActivity){
lastPeriodOfFirstActivity--;
} else
if(lastPeriodOfFirstActivity>lastPeriodOfSecondActivity){
lastPeriodOfFirstActivity=lastPeriodOfSecondActivity-1;
}
else {
int numberOfFollowingBreaks=0;
for(int i=lastPeriodOfFirstActivity+1;
i<=lastPeriodOfSecondActivity; i++){
if(!breakDayHour[d][i]){
break;
}
numberOfFollowingBreaks++;
}
if(firstPeriodOfFirstActivity+durationFirstActivity+numberOfFollowingBreaks>lastPeriodOfSecondActivity){
firstPeriodOfFirstActivity=-1;
firstPeriodOfSecondActivity=-1;
} else {
if(lastPeriodOfSecondActivity>lastPeriodOfFirstActivity+durationFirstActivity+numberOfFollowingBreaks){
lastPeriodOfSecondActivity=lastPeriodOfFirstActivity+durationFirstActivity+numberOfFollowingBreaks;
assert(!breakDayHour[d][lastPeriodOfSecondActivity]);
}
}
}
/*if(lastPeriodOfFirstActivity<firstPeriodOfFirstActivity
|| lastPeriodOfSecondActivity<firstPeriodOfSecondActivity
|| firstPeriodOfFirstActivity>firstPeriodOfSecondActivity
|| lastPeriodOfFirstActivity>lastPeriodOfSecondActivity){
QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("F1=%1 L1=%2 F2=%3
L2=%4").arg(firstPeriodOfFirstActivity).arg(lastPeriodOfFirstActivity).arg(firstPeriodOfSecondActivity).arg(lastPeriodOfSecondActivity));
}*/
assert(lastPeriodOfFirstActivity<gt.rules.nHoursPerDay);
assert(lastPeriodOfSecondActivity<gt.rules.nHoursPerDay);
//assert(firstPeriodOfFirstActivity<=firstPeriodOfSecondActivity);
// not correct that this position, correction is following now
assert(lastPeriodOfFirstActivity<=lastPeriodOfSecondActivity);
if((firstPeriodOfFirstActivity>=0) &&
(firstPeriodOfSecondActivity>=0)){
if(firstPeriodOfFirstActivity==firstPeriodOfSecondActivity){
firstPeriodOfSecondActivity+=durationFirstActivity;
assert(lastPeriodOfFirstActivity<=lastPeriodOfSecondActivity);
} else
if(firstPeriodOfFirstActivity>firstPeriodOfSecondActivity){
firstPeriodOfSecondActivity=firstPeriodOfFirstActivity+durationFirstActivity;
assert(lastPeriodOfFirstActivity<=lastPeriodOfSecondActivity);
}
else {
int numberOfFollowingBreaks=0;
for(int i=firstPeriodOfSecondActivity-1;
i>=firstPeriodOfFirstActivity; i--){
if(!breakDayHour[d][i]){
break;
}
numberOfFollowingBreaks++;
}
assert(lastPeriodOfFirstActivity<=lastPeriodOfSecondActivity);
if(lastPeriodOfSecondActivity-durationFirstActivity-numberOfFollowingBreaks<firstPeriodOfFirstActivity){
firstPeriodOfFirstActivity=-1;
firstPeriodOfSecondActivity=-1;
} else {
if(firstPeriodOfFirstActivity<firstPeriodOfSecondActivity-durationFirstActivity-numberOfFollowingBreaks){
firstPeriodOfFirstActivity=firstPeriodOfSecondActivity-durationFirstActivity-numberOfFollowingBreaks;
assert(!breakDayHour[d][firstPeriodOfFirstActivity]);
}
}
}
}
assert(lastPeriodOfFirstActivity<gt.rules.nHoursPerDay);
assert(lastPeriodOfSecondActivity<gt.rules.nHoursPerDay);
assert(firstPeriodOfFirstActivity<=firstPeriodOfSecondActivity);
assert(lastPeriodOfFirstActivity<=lastPeriodOfSecondActivity);
if( lastPeriodOfFirstActivity<firstPeriodOfFirstActivity
|| lastPeriodOfSecondActivity<firstPeriodOfSecondActivity
|| firstPeriodOfFirstActivity>=lastPeriodOfSecondActivity
||
firstPeriodOfFirstActivity+durationFirstActivity>lastPeriodOfSecondActivity
||
lastPeriodOfSecondActivity-durationFirstActivity<firstPeriodOfFirstActivity){
firstPeriodOfFirstActivity=-1;
firstPeriodOfSecondActivity=-1;
}
}
/*if(lastPeriodOfFirstActivity<firstPeriodOfFirstActivity
|| lastPeriodOfSecondActivity<firstPeriodOfSecondActivity
|| firstPeriodOfFirstActivity>firstPeriodOfSecondActivity
|| lastPeriodOfFirstActivity>lastPeriodOfSecondActivity){
QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("F1=%1 L1=%2 F2=%3
L2=%4").arg(firstPeriodOfFirstActivity).arg(lastPeriodOfFirstActivity).arg(firstPeriodOfSecondActivity).arg(lastPeriodOfSecondActivity));
}*/
//lastPeriodOfFirstActivity>firstPeriodOfSecondActivity
if((firstPeriodOfFirstActivity<0) ||
(firstPeriodOfSecondActivity<0)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
int currentTime=d+h*gt.rules.nDaysPerWeek;
if(notAllowedTimesPercentages[firstActivity][currentTime]!=100){
notAllowedTimesPercentages[firstActivity][currentTime]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
}
if(notAllowedTimesPercentages[secondActivity][currentTime]!=100){
notAllowedTimesPercentages[secondActivity][currentTime]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
}
}
continue;
}
//TODO: only if this happen each day!!!
/*if(lastPeriodOfFirstActivity + durationFirstActivity <
firstPeriodOfSecondActivity){
QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("Activity %1 and Activity %2 can't be
consecutive.").arg(gt.rules.internalActivitiesList[firstActivity].id).arg(gt.rules.internalActivitiesList[secondActivity].id));
}
if(firstPeriodOfSecondActivity - durationFirstActivity < 0){
QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("*Activity %1 and Activity %2 can't be
consecutive.").arg(gt.rules.internalActivitiesList[firstActivity].id).arg(gt.rules.internalActivitiesList[secondActivity].id));
QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("%1 - %2 <
0").arg(firstPossiblePeriodForSecondActivity).arg(durationFirstActivity));
}*/
//lock times of first activity
for(int h=0; h<gt.rules.nHoursPerDay; h++){
int currentTime=d+h*gt.rules.nDaysPerWeek;
if(h<firstPeriodOfFirstActivity){
if(notAllowedTimesPercentages[firstActivity][currentTime]!=100){
notAllowedTimesPercentages[firstActivity][currentTime]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("* Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h).arg(gt.rules.internalActivitiesList[firstActivity].id));
}
} else if(h>lastPeriodOfFirstActivity){
if(notAllowedTimesPercentages[firstActivity][currentTime]!=100){
notAllowedTimesPercentages[firstActivity][currentTime]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("* Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h).arg(gt.rules.internalActivitiesList[firstActivity].id));
}
} else
if(notAllowedTimesPercentages[firstActivity][currentTime]==100
&& !breakDayHour[d][h]){
if(h+1<gt.rules.nHoursPerDay){
if(notAllowedTimesPercentages[secondActivity][d+(h+1)*gt.rules.nDaysPerWeek]!=100){
notAllowedTimesPercentages[secondActivity][d+(h+1)*gt.rules.nDaysPerWeek]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("*second* Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h-durationFirstActivity).arg(gt.rules.internalActivitiesList[firstActivity].id));
}
}
}
}
//lock times of second activity
for(int h=0; h<gt.rules.nHoursPerDay; h++){
int currentTime=d+h*gt.rules.nDaysPerWeek;
if(h<firstPeriodOfSecondActivity){
if(notAllowedTimesPercentages[secondActivity][currentTime]!=100
&& !breakDayHour[d][h-1]){
notAllowedTimesPercentages[secondActivity][currentTime]=100;
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("** Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h).arg(gt.rules.internalActivitiesList[secondActivity].id));
addImprovement=true;
foundImprovement++; //TODO delete this
}
} else if(h>lastPeriodOfSecondActivity){
if(notAllowedTimesPercentages[secondActivity][currentTime]!=100){
notAllowedTimesPercentages[secondActivity][currentTime]=100;
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("*** Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h).arg(gt.rules.internalActivitiesList[secondActivity].id));
addImprovement=true;
foundImprovement++; //TODO delete this
}
} else
if(notAllowedTimesPercentages[secondActivity][currentTime]==100
&& !breakDayHour[d][h]){
if(h-durationFirstActivity>=0){
if(notAllowedTimesPercentages[firstActivity][d+(h-durationFirstActivity)*gt.rules.nDaysPerWeek]!=100){
notAllowedTimesPercentages[firstActivity][d+(h-durationFirstActivity)*gt.rules.nDaysPerWeek]=100;
addImprovement=true;
foundImprovement++; //TODO delete this
//QMessageBox::warning(nullptr, QObject::tr("FET warning"),
QObject::tr("*first* Lock day %1 and hour %2 of activity
%3.").arg(d).arg(h+durationFirstActivity).arg(gt.rules.internalActivitiesList[secondActivity].id));
}
}
}
}
}
}
}
}
}
//end Volker
359---------------------------------------------------------
From Volker Dirr:
Care about not available times if activities are grouped (2 or 3).
360---------------------------------------------------------
From Volker Dirr:
Care about not available times if students early, no gaps and max hours per day.
361---------------------------------------------------------
From Volker Dirr:
The following code should be nearly perfect for CONSTRAINT_ACTIVITIES_SAME_STARTING_DAY and CONSTRAINT_ACTIVITIES_SAME_STARTING_HOUR.
(For example 2 activities with CONSTRAINT_ACTIVITIES_SAME_STARTING_DAY.
A1 only available at one day in the first hour and A2 is also available
at the same day also not the same hour and A1 is conflicting with A2,
then my code won't see that it is possible to disallow that hour also.
but I think that these are very very unlikely and special cases. I don't know
if something like that is in a real dataset and if it is useful to
search for such improvements, since those are more critical to detect.
This can be also improved if you care about duration.)
The code also includes simplified speedups for CONSTRAINT_TWO_ACTIVITIES_GROUPED, CONSTRAINT_TWO_ACTIVITIES_CONSECUTIVE and CONSTRAINT_THREE_ACTIVITIES_GROUPED.
These constraints can still be improved.
Before computeFixedActivities in generate_pre it is useful to disallow days and hours that can't be available:
QList<QSet<int>> activitiesListWithDayNotAvailableSet;
QList<QSet<int>> activitiesListWithHourNotAvailableSet;
for(int ai=0; ai<gt.rules.nInternalActivities; ai++){
QSet<int> dayNotAvailable;
activitiesListWithDayNotAvailableSet<<dayNotAvailable;
}
for(int ai=0; ai<gt.rules.nInternalActivities; ai++){
QSet<int> hourNotAvailable;
activitiesListWithHourNotAvailableSet<<hourNotAvailable;
}
bool notAvailableFound=computeDayOrHourNotAvailable(&activitiesListWithDayNotAvailableSet, &activitiesListWithHourNotAvailableSet);
while(notAvailableFound){
setNotAvailable(&activitiesListWithDayNotAvailableSet, &activitiesListWithHourNotAvailableSet);
notAvailableFound=computeDayOrHourNotAvailable(&activitiesListWithDayNotAvailableSet, &activitiesListWithHourNotAvailableSet);
}
bool computeDayOrHourNotAvailable(QList<QSet<int>> *activitiesListWithDayNotAvailableSet, QList<QSet<int>> *activitiesListWithHourNotAvailableSet){
bool newImprovementFound=false;
for(int ai=0; ai<gt.rules.nInternalActivities; ai++){
for(int d=0; d<gt.rules.nDaysPerWeek; d++){
bool wholeDayNotAvailable=true;
for(int h=0; h<gt.rules.nHoursPerDay; h++){
if(notAllowedTimesPercentages[ai][d+h*gt.rules.nDaysPerWeek]!=100){
wholeDayNotAvailable=false;
break;
}
}
if(wholeDayNotAvailable){
if(!(*activitiesListWithDayNotAvailableSet).at(ai).contains(d)){
(*activitiesListWithDayNotAvailableSet)[ai]<<d;
newImprovementFound=true;
}
}
}
}
for(int ai=0; ai<gt.rules.nInternalActivities; ai++){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
bool wholeHourNotAvailable=true;
for(int d=0; d<gt.rules.nDaysPerWeek; d++){
if(notAllowedTimesPercentages[ai][d+h*gt.rules.nDaysPerWeek]!=100){
wholeHourNotAvailable=false;
break;
}
}
if(wholeHourNotAvailable){
if(!(*activitiesListWithHourNotAvailableSet).at(ai).contains(h)){
(*activitiesListWithHourNotAvailableSet)[ai]<<h;
newImprovementFound=true;
}
}
}
}
return newImprovementFound;
}
void setNotAvailable(QList<QSet<int>> *activitiesListWithDayNotAvailableSet, QList<QSet<int>> *activitiesListWithHourNotAvailableSet){
for(int i=0; i<gt.rules.nInternalTimeConstraints; i++){
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_ACTIVITIES_SAME_STARTING_DAY){
ConstraintActivitiesSameStartingDay* sst=(ConstraintActivitiesSameStartingDay*)gt.rules.internalTimeConstraintsList[i];
if(sst->weightPercentage==100){
for(int j=0; j<sst->_n_activities; j++){
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(j)){
for(int ai=0; ai<sst->_n_activities; ai++){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[ai][d+h*gt.rules.nDaysPerWeek]=100;
}
}
}
}
}
}
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_TWO_ACTIVITIES_GROUPED){
ConstraintTwoActivitiesGrouped* c2=(ConstraintTwoActivitiesGrouped*)gt.rules.internalTimeConstraintsList[i];
if(c2->weightPercentage==100){
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->firstActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->secondActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->secondActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->firstActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
}
}
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_TWO_ACTIVITIES_CONSECUTIVE){
ConstraintTwoActivitiesConsecutive* c2=(ConstraintTwoActivitiesConsecutive*)gt.rules.internalTimeConstraintsList[i];
if(c2->weightPercentage==100){
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->firstActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->secondActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->secondActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->firstActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
}
}
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_THREE_ACTIVITIES_GROUPED){
ConstraintThreeActivitiesGrouped* c2=(ConstraintThreeActivitiesGrouped*)gt.rules.internalTimeConstraintsList[i];
if(c2->weightPercentage==100){
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->firstActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->secondActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
notAllowedTimesPercentages[c2->thirdActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->secondActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->firstActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
notAllowedTimesPercentages[c2->thirdActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
foreach(int d, (*activitiesListWithDayNotAvailableSet).at(c2->thirdActivityIndex)){
for(int h=0; h<gt.rules.nHoursPerDay; h++){
notAllowedTimesPercentages[c2->firstActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
notAllowedTimesPercentages[c2->secondActivityIndex][d+h*gt.rules.nDaysPerWeek]=100;
}
}
}
}
if(gt.rules.internalTimeConstraintsList[i]->type==CONSTRAINT_ACTIVITIES_SAME_STARTING_HOUR){
ConstraintActivitiesSameStartingHour* sst=(ConstraintActivitiesSameStartingHour*)gt.rules.internalTimeConstraintsList[i];
if(sst->weightPercentage==100){
for(int j=0; j<sst->_n_activities; j++){
foreach(int h, (*activitiesListWithHourNotAvailableSet).at(j)){
for(int ai=0; ai<sst->_n_activities; ai++){
for(int d=0; d<gt.rules.nDaysPerWeek; d++){
notAllowedTimesPercentages[ai][d+h*gt.rules.nDaysPerWeek]=100;
}
}
}
}
}
}
}
}
362--------------------------------------------------------
From math (on forum):
When I start preparing a new timetable for the next semester, I do not start from scratch but from some kind of base configuration file. This file
contains general information about rooms, times of blocks, teachers, lecture titles, etc. So I can directly start with creating activities etc.
The list of teachers is quite long and encompasses both internal and external teachers. Internal teachers have a full contract with our university
while external teachers are external experts that are hired only for one specific lecture, project or seminar in that particular semester.
If somebody new is giving a lecture for the first time, I add him or her to this base configuration file, no matter if he/she will ever give a course
in one of the following semesters. Hence, only a small subset of configured teachers is actually teaching within that semester. When printing timetables
for teachers, I either have to create lots of empty timetables or I have to carefully select all the "active" teachers from the list. To be honest,
I usually take the easier way.
So here's my suggestion: wouldn't it be possible to add another option to the settings dialog? (e.g. Settings -> Timetables -> Hide teachers without activities)
When this option is disabled (standard behaviour), FET acts like it currently does.
When this option is enabled, the list of teachers in the timetabling dialogs (Timetable -> Teachers -> ...) is filtered, so that it only contains teachers
that actually have activities in their timetables. Also the teacher list in the printing dialog (Timetable -> Print -> Teachers) is filtered in this way.
---
Additional suggestion from math on this subject:
When selecting "Timetable -> Print" a dialog opens that has a dropdown list with potential printing types (e.g. rooms, teachers, subjects, ...). When selecting an
item from that dropdown list, the listbox on the left hand side is filled with all items of that type, e.g. all rooms. Below that listbox there are two buttons "All"
and "None". By pressing these buttons I can select/deselect all items of that list.
I thought of adding a third button (e.g. "used") here. When pressing that button only those items are selected that are actually used in the recently generated
timetable. For example:
- if pressing the "used" button in "teacher" mode, only the teachers from the list are selected that have at least one activity planned (i.e. omitting all teachers
with empty timetables)
- if pressing the "used" button in "room" mode, only rooms from the list are selected that are used for at least one activity
- if pressing the "used" button in "subgroup" mode, only student subgroups are selected where at least one activity is assigned (i.e. omitting all subgroups without
activities, e.g. due to internship semesters)
363---------------------------------------------------------
From pg788 (on forum):
I understand this might be restrictive, but a teacher doesn't want to begin in 3rd or 4th, since there is traffic.
364-----MUST BEGIN STUDENTS DAY IS DONE---------------------
From Dietmar Deuster and Volker Dirr:
Constraints:
- activity must start a students day
- activity must start or end a students day
Liviu: start may be possible, but start or end seems very difficult, maybe impossible. Please see also item #295, point 2.
365---------------------------------------------------------
From Volker Dirr and Liviu Lalescu:
Volker has a private file which sometimes is solvable, but sometimes may cycle. We tried to improve the code, but it runs much slower on other files.
366---------------DONE since FET-5.40.1 2019-11-14----------
367---------------partially DONE since FET-6.8.0------------
From Anthony Siaudeau:
Is there a possibility to have tags to constraints (for example to activate/inactivate a group of constraints with one click) ?
Is there a possibility to activate/inactivate activities with one click in the activities windows ?
Volker Dirr:
I fear a bit that adding such a constraint into official version might mislead several FET users to do hasty action. So I guess such a feature will make
it only much more complicated to users with low skills since they won't understand their bugs anymore if the enable/disable several constraint at once.
Anthony Siaudeau:
I understand the risks for soft users. Is it possible to add in advanced settings an unlock button for active check boxes ?
Liviu Lalescu: since FET-6.8.0 (2023-01-08) it is possible to activate/deactivate all the listed time/space constraints and activities. There is also
an advanced filter there (for the time/space constraints available since a long time now, for activities starting with this FET version).
368-----------DONE in FET-6.12.0 on 3 November 2023---------
369---------------------------------------------------------
From George Milliotis (Corfiot) - on forum:
I would like to be able to group activities (maybe via tags) and be able to save html only for one or more of those groups.
I generate schedules for undergrads, postgrads and some special course sets and I have to generate them together so the rooms/teachers work out.
Then I need to copy FET output to separate tables manually to distribute. I would like to have the ability to just output different schedules.
It would possibly be easier to be able to export a new FET file with only the rules and activities relevant to this group/tag. I could then
generate schedule html from those files. Although that would require some extra steps.
370---------------------------------------------------------
(DONE? Liviu Lalescu: in FET-6.17.0 (February 2024) we added constraint students (set) / teacher(s) max hours daily in hourly interval.)
From George Milliotis (Corfiot) - on forum:
I would like to have activities that do not count towards time or space rules. I have breaks that have to be within a specific time range so that
students can eat while the restaurant is open.
If I put an activity for that FET finds places for me, which is a great help but then rules like students max hours continuously trigger and my
schedule breaks.
What I'm after are "soft" breaks.
371---------------------------------------------------------
From George Milliotis (Corfiot) - on forum:
I make schedules and then save them locked in a new FET file. This leaves the general constraints in the file alongside the newly added specific
locking rules. If I later make a change to the placement of an activity (time or space) FET only says that it can't be placed.
I would like FET to list me all the rules conflicting with the two locked time/space rules for the activity so I can pinpoint which "general"
constraint is the problem. This would save me A LOT of time.
Eg:
Activity #111: Blah blah, teacher blah, students blah
TIME LOCK (day X - time Y) PLACEMENT FAILED BECAUSE:
this rule
that rule
SPACE LOCK (room Z) PLACEMENT FAILED BECAUSE:
this rule
that rule
For example, it should be obvious that a rule max students hours daily that blocks a set of locked activities on the same day for that student set
is easily detectable as the culprit.
Or, a max teachers gaps per week rule when all other relevant activities to a teacher are placed, would also be easy to identify if we're placing
a time-locked activity.
372---------------------------------------------------------
From satellite2 - on forum:
FET has the option for selecting buildings of the rooms and assigning very useful constraints for the teachers/students such as min gaps
between building changes and max building changes per day/week. Our university has 3 different campuses in the city and they are really
far away from each other. Sometimes teachers and students need to visit more than one campus a week for different courses. So with the
current options, I am considering to use each campus name as a building and assign the max building changes per day to ZERO since it is
not that easy for teachers/students to change their campus in a day. However, this time I will not be able to use the actual building names
inside each campus. I will not be able to assign min gaps between building changes since building names are used for the campus names. Actual
buildings are also needed since some of the buildings also have some distance between them on foot and at least 1 period gap is needed.
What I want to ask is that is it difficult to add an additional hierarchical level above building variable to the current code and call it
"campus" or something else? Also similar space constraint for the campus variable such as max campus changes a day?
Liviu and satellite2: maybe add each building in its own campus.
373---------------------------------------------------------
From Jude G:
(the second part was done in FET-6.22.0)
* Importing comments to activities / students / teachers.
374---------------------------------------------------------
From bharatstank (on forum): (https://lalescu.ro/liviu/fet/forum/index.php?topic=3989.0)
Room not available constraint - wherein (X) crossing the specific slot means No activity is placed in that (X) slot.
Please suggest - if there is any option, wherein I can Define multiple type of Room not available constraints, so that Instead of (X) slot - we have better meaningful
Message to display.
There are few Activities, which are not time tabled and are communicated back to the concern department by simply (X) the Class rooms slot.
375---------------------------------------------------------
From satellite2 (on forum): (https://lalescu.ro/liviu/fet/forum/index.php?topic=3996.0)
The other constraint is "max hours per day for a teacher (or all teachers)". Is there a way to add another constraint like "max activities per day for a
teacher (or all teachers)" ? The hours of the activities change from 1 to 4 but teachers see them as an activity and let's say some of them don't want more
than two activities a day etc.
376---------------------------------------------------------
From Volker Dirr:
Disable energy saving mode, because FET won't calculate anymore if
the computer falls into save mode after x minutes.
377----------------------DONE-------------------------------
378---------------------------------------------------------
From CarolStott and Volker Dirr (on forum):
- A teacher-subject matrix to enter teacher qualified subjects (so you
only need to enable/disable a cell in a table)
Another similar suggestion by CarolStott (on forum: https://lalescu.ro/liviu/fet/forum/index.php?topic=5408.0)
I've asked a similar question before, regarding whether there is a way of inserting a large group of teachers qualified subjects en masse without having to go
through each one individually. Still, I have a slightly different question - is there a way of importing a teacher's qualified subjects via CSV? If not, is there
no other way of inserting the teacher's qualified subjects apart from going through them one by one?
379---------------------------------------------------------
From Volker Dirr:
In the "Add activity" dialog:
Under the word "duration" (so left from the "active" checkbox) there is still
enough place to add some useful information.
I suggest to add the currently computed "Total duration".
380---------------------------------------------------------
From Christoph Voelker and math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4068.0
They refer to the selection mark and the colors in the constraints activity(ies) preferred times and activities occupy max time slots from selection.
381---------------------------------------------------------
From Nagendra (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4085.0
Let us say a time table is generated with some constraints and locked. Now, If a faculty wants to re-schedule an activity, then if an interface as explained below
will be much more appealing.
Stage-1
Say, Teacher-1 wants his lecture scheduled on Monday Morning 8:30 to be shifted to any other possible day&timing of his own timetable. So, we go to the particular
teacher's timetable and click on the box. If by some means, all the possible positions (satisfying all the constraints) where this lecture could be relocated gets
highlighted, then it would be great. Just like we play chess on a computer, and all possible moves of a chesspiece gets highlighted upon selection. Then a simple
drag and drop kind of thing.
Stage-2
Teacher-1 wants his lecture scheduled on Monday Morning 8:30 (say Group A) to be swapped with some teacher-2 who is teaching the same student group (A), but
different subject. By showing both teachers timetable side-by-side and highlighting the boxes of teacher-2 upon clicking the lecture of Teacher-1.
This is just a suggestion, definitely not very important. But, it will be very easy this way to modify timetable without breaking constraints, if we get some
swap requests.
382-----------------------DONE------------------------------
383---------------------------------------------------------
From Nagendra (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4104.0
Add a constraint to limit the maximum number of subgroups (or number of students?) in any given time slot.
384---------------------------------------------------------
From Diego Froner (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4128.0
I use the import of CSV files too often because all my planning is made in Excel. One step of this planning is to choose a home room for some classes.
So, after all the imports, i have to set a home room for about 350~400 classes manually.
My suggestion is to add a "column" in CSV for import "years, groups and subgroups" named "home room" which would be optional. It would automatically
add the respective "A set of students has a home room" constraint.
Example:
Year ; Number of Students ; Home Room
ClassA ; 10 ; Room 01
This example will set "Room 01" as the home room for "classA" which has 10 students.
Volker Dirr:
a) we need to stay at the old csv file format, since several other projects already use it. So changes might be very critical in that file format
b) we should add all constraints in that files (not only home rooms). Similar to teachers and rooms.
c) Because a) and b) conflict each other we should add a second csv file format.
385---------------------------------------------------------
From Volker Dirr:
Split year dialog: It should be possible to sort the group names. I think manual sort (by using "up" and "down" buttons)
will be better than only alphabetic sort.
386---------------------------------------------------------
From Ireri Venture:
I would suggest you to add the constraint minimum continuous hours for a teacher.
Advantages of min continuous would help a school like ours where there is sessions we do have where daily a teacher has minimum of 3 sessions
and we would wish one to have the capability of teaching 3 sessions continually and then rest or go home since the total sessions are 5.
387---------------------------------------------------------
From Volker Dirr:
there is a warning at the beginning if you generate about how to speed up by
deleting subgroups.
in my opinion that is very useful, since guys that work with such a file
can use it.
first of all i thought it is a nice idea if i just do that improvement
in my source myself; so just not exporting those duplicated. but that
idea is bad, because there is a disadvantage: it won't be possible
to output a subgroup for every student. (only if you tell him: Mr. X,
please use the table of Ms. Y, it is the same table.)
So what do you think about the following idea:
there should be a feature to disable those duplicates.
so FET can generate the table fast.
as soon as you get the results you just open the saved data from the
results folder, enable the subgroups again and regenerate. By that they
will look fine.
Liviu: It is a bit complicated, and also the constraints for these subgroups
should be the same (yes, in practice they will probably be the same).
388---------------------------------------------------------
Partially DONE in FET-5.40.0 (2019-09-25): the constraints of type teacher(s) max span per day allow one day exception.
From Luca (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4177.0
Allow a one day exception for the constraints of type teacher(s) max hours daily and teacher(s) max span per day, in which day the teacher(s)
can have +1 more hours/span.
Additional suggestions by bachiri401: Allow a number of n days of exception for the constraints of type teacher(s)/students (set) max/min hours daily.
Also suggested previously by totera:
https://lalescu.ro/liviu/fet/forum/index.php?topic=3915.0
Several teachers can work max 5 hours daily, but only once a week; in the other days the maximum is 4.
At the moment if in the generated timetable there is a teacher with two 5-hour days I add the constraint that all his activities occupy max 9 hours
in those days, but the problem presents again in other days or other teachers and it would be very laborious to add the constraints for all the
possible pairs of days. Is there any alternative solution?
Also suggested by astigol on forum:
https://lalescu.ro/liviu/fet/forum/index.php?topic=4284.0
389---------------------------------------------------------
From Ireri Venture:
Writing a custom text (like "Break") in the timetable instead of "-X-".
There might be more break periods in the timetable. The HTML output should have a whole row/column with the name of the corresponding break
(possibly more names in the same timetable, like: "Lunch", "Supper"), written only once, and if on a column, written vertically.
390---------------------------------------------------------
From Ireri Venture:
The hours' names may be numbered starting with 1, 2, ..., and next to them, smaller, their time.
391---------------------------------------------------------
From Aisse (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4283.0
Hello .. I have a suggestion and I hope that you will try to achieve it .. Some data in the tables would be better to arrange in descending order
so that we do not have to go down every time .. For example when I click on the constraints of time: "All" appear the latest constraints in the
bottom .. I think it would be better to arrange it in descending order, the last constraint appears first directly under the constraint Primary.
I am sorry again because my English is not strong .. I hope you understand my idea .. Thank you for all your efforts .
392-------DONE----------------------------------------------
393-------DONE since FET-5.41.0 - 2019-11-18----------------
394---------------------------------------------------------
From math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4343.0
I was wondering if it may be possible to introduce an active flag to teacher configuration (i.e. Data -> Teachers).
Background: beside a core team of permanent teachers we have a large team of external teachers and contracted students. If somebody participates
in teaching for the first time, I'm adding him/her to the fet configuration as teacher. For the sake of laziness I'm only adding, but never removing,
because it happens quite often that external teachers return in later semesters. Even permanent staff is inactive from time to time, e.g. during
sabbaticals or visiting reasearch at other universities. And in fact, I do not only have to enter the name to the FET configuration but also the
internal ID from our SAP system. So I just want to omit the overhead of adding this information each and every semester again.
But the downside of this approach is that my teacher listboxes grow in size quite fast. When defining activities or setting filters, I have to search
in a large list of teachers that might be significantly smaller, if only I would remove inactive teachers.
Having an active flag would allow me to quickly toggle the status of all teachers at the beginning of the semester. If a teacher is toggled inactive,
he/she would not be added to listboxes. He/she would be also omitted in the schedule generation, i.e. no schedule is generated for this person.
The only difficuly I see is how to handle this situation: what happens if a teachers gets toggled inactive while there are activities on his name?
I would suggest the following:
- When a teacher gets toggled inactive, FET checks whether there are activities for him/her. If yes, a warning dialog is displayed saying "There are
activities for this teacher. Are you sure?" If "no" is pressed, the teacher remains active. If "yes" is pressed, the teacher gets toggled inactive.
- If FET discoveres an inactive teacher at schedule generation time, it displays a warning ("Activity 1234 has been assigned to an inactive teachers),
but ignores the inactive teacher. (i.e. it schedules the activity as if the inactive teacher wouldn't have been assigned to the activiy).
This behaviour would be beneficial for community activities, e.g. jour fixe meetings. I simply add all relevant teachers to the activity, not caring
if they are actually teaching this semester or not. By analyzing the active flag, FET would only schedule active teachers to these activities.
The other option to handle this situation would be to reject toggling a teacher as inactive while he/she has activities.
395---------------------------------------------------------
From Nagendra (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4365.0
Say, activities are created with students and subjects (without teachers).
Currently, FET assigns these activities to rooms (subjected to the constraints).
Similarly, you can include an option to assign teachers automatically, if a user wants FET to do so. User may be given option to toggle/untoggle
the feature of assigning teachers automatically.
This way the official FET can be used for both regular as well as exam timetables.
396----------DONE in FET-6.12.0 and in FET-6.15.0-----------
397---------------------------------------------------------
From Corfiot (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4368.0
Corfiot:
Would it be possible to add rule groups that one could enable/disable? This would be a ui-side thing and groups could be stored in the XML file separately from rules, so the rule storage schema is not affected.
This would help a lot with creation of difficult timetables, you could group "easy"/"important" rules together, fiddle to get a schedule, then add more rules, fiddle, and repeat, adding more optional/nice to have restrictions.
The UI would be about creating a group (name it) and then in the filter dialog of any rule display dialog add an option to add these rules to a group. Finally, a small dialog to display/delete rules from a group.
How feasible is this?
Liviu Lalescu:
It is an interesting idea. The problem is that constraints do not have an ID, so you cannot specify exactly the constraints in a group.
But Anthony Siaudeau and I have better ideas (there is an older custom version created for Anthony Siaudeau based on his suggestion). He suggested that a constraint can have a weight or a weight name. Weight names have modifiable values. You can create more weight names and assign them to the constraints. Then with only a click you can change the value of a weight name and thus modify the weights of more constraints at once. My idea is to do this also to enable/disable constraints (add some Boolean variables to be attached as the "enabled" state of some constraints). This is because many constraints can have only 100% weight, and they need to be disabled if you want this - their weight cannot simply be made 0.
398-----DONE by Qt 6-(QList is as efficient as QVector)-----
399---------------------------------------------------------
From math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4370.0
Meaning of colors:
When enabling "Settings -> Interface -> Use colors", activities in time table dialogs (e.g. Timetable -> Students -> Days horizontal) are colored.
Do these colors have any meaning or are they selected randomly?
Liviu Lalescu:
The coloring code for the timetables was contributed by Marco Vassura, and I think he said it was a classical routine. The colors for the students'
timetables compute the color from the subject, while for the teachers'/rooms' timetable compute the color from the subject+students' names. The color
is random, but the same for the same string (same subject or same subject+students names).
The HTML timetables with level 7 are similar, I think.
math:
Ah, ok, that's what I guessed.
The reason I was asking was because I would wish for a different coloring scheme. We have multiple activities for one course. Beside a lecture and
an exercise, we also have tutorials, lab hours or central exercises. Hence there are multiple subjects for one course with very similar names, e.g.
"Programming 1 VL" (lecture), "Programming 1 UE" (exercise), "Programming 1 LAB", etc. I would like to see that activities with similar subject names
would get similar colors, so that it is clear on the first sight how the different activities of the courses are distributed over the schedule.
For instance, one could use the Levenshtein distance for determining the level of similarity between two subjects.
Volker Dirr:
Sadly "Programming 1 VL" and "Programming 1 UE" are different names, so the colours will be different. You might set "VL" and "UE" as a tag name,
so the names will be the same.
You might also check TiTiTo. Just import the dataset and export the table again, since you can select different colours with that tool.
A second variant is that you colour yourself by the css file with html level 6.
Liviu Lalescu:
Yes, unfortunately the colors are based on a 24-bit hash, so they are (or should be) very different for even small changes. Unfortunately I cannot
do like you suggest. Maybe you can follow what Volker said.
400--------DONE in FET-6.17.0, February 2024----------------
401---------------------------------------------------------
From Volker Dirr:
(inspired by this paper: https://www.herrmann-online.info/documents/bachelorarbeit.pdf)
Write the rooms' free periods timetables in the HTML results. The rooms should be grouped by buildings.
402---------------------------------------------------------
From Eric de Quartel:
Is it possible to get the numbers of the activities in the HTML timetable. It makes it easier to communicate when changes have to be made.
(Eric refers to writing the id-s of the activities in the HTML timetables, and maybe adding a check box for this.)
Volker Dirr:
print it in the first line or the last line?
Eric de Quartel:
Second line I think. Is very helpful.
Volker Dirr:
hmmm...
that id's might help the timetablemaker who use the fet gui. but i guess
it will only do trouble for students and "normal" teachers. those guys
can always say "in table x, day y and hour z" (of course that are 3
numbers/names, but it 100% clear. no wasting space on sheet, no swapping
id number with room number or students year, no explaining need why
there is that strange number, ...)
so shouldn't it be in the GUI only, but not in html table?!
403---------------------------------------------------------
From Cyrus (on forum):
(see also entry #400)
https://lalescu.ro/liviu/fet/forum/index.php?topic=4391.0
I have used the constrain on 'a set of activities occupies max/min slots from selection' and its amazing though tedious more so when you
have putting all teachers and classes. Is it possible we have a general constrain for all teachers and students such that it will be easier
to put constrains revolving around all teachers and students? If it can be there, it can really help alot
404---------------------------------------------------------
From Volker Dirr:
(since i am currently doing again a very difficult timetable and i think it will be useful for those very difficult tables):
optional enable in the settings "write highest stage solution if running out of generation time".
405---------------DONE--------------------------------------
406---------------DONE in FET-6.4.0-------------------------
407---------------------------------------------------------
From Vangelis Karafillidis:
In the Timetable view dialogs: add a button, so the user can add an activity tag + a comment for the selected activities
and maybe add the option to modify a selected activity.
408---------------------------------------------------------
From Darren McDonald (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4151.msg24155#msg24155
Darren proposes different icons for the custom versions, and other things:
I've had some thoughts about the FET app icon (both the standard and custom versions).
What do you all think about a text-free icon? (So, perhaps just the box, with a different coloured box for the custom versions.)
In any event, it would be useful to have higher resolution icons (even if the icon design goes unchanged), so this might also be
an opportunity to refresh the icon design itself.
409---------------------------------------------------------
From Francesco Rizzo:
He proposes a filter teacher as a combo box in the all time constraints dialog (as opposed to writing the name of the teacher in the
advanced filter there) and a filter with the room name as a combo box in the all space constraints dialog.
410---------------------------------------------------------
From bachiri401:
The students should keep the same room for a selectable 1, 2, 3, or 4 hours in a row (he is using FET for Algeria, but suggests that
this might be useful also for the official FET and for other FET custom versions).
411---------------------------------------------------------
From Peter Johnson (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4463.0 (Posted on 22 May 2020)
When I was using an old version of FET, I could have a "student home room", "teacher home room" and for those activities that its
teacher and student has "home room" constraint, I could define an "activity preferred room'. In this way, FET was ignoring the student
and teacher's home room constraints and just consider the "activity preferred room". But now that I have switched to the new version,
it says "Cannot generate timetable, because for activity with id==1 you have no allowed home room (from constraints students set home
room(s) and teacher home room(s))".
What I need is that a teacher T1 has many classes, and they should be in his home room by default. The same holds for a student set S1,
but the teacher T1 has just one specific class with S1, and it can be in another room (maybe in T1's home room, or S1's home room or any
other room). Is there any solution to use the new version of FET and apply this, or I have to use the old version?
Liviu Lalescu:
I assume you have problems with a file like the attached one (teacher home room 100% to R1, students set home room 100% to R2, and preferred
rooms 100% for that subject to R1 and R2). But I tried with FET-5.27.3, release about 5 years ago, and it behaves like the current
FET-5.44.7, refusing to start the generation because of conflicting home rooms constraints. (FET-5.44.7 was released on 20 May 2020
and FET-5.27.3 was released on 9 June 2015.)
Yes, I admit, you are right. I don't remember exactly the reasons for this behavior, but I think there was a reason. I will think about
it, but for the moment I think it should remain like it is. It is risky to change old code.
412-----------------------DONE------------------------------
413---------------------------------------------------------
From math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4524.0
In Time->Students it's possible to specify "Max gaps per day/week", but this applies to ALL activities. Since I do not care for gaps
between e-learning activities, I cannot use that constraint.
I'm thinking about something like Time->Tags->"Max gaps per day/week". This way I could tag all on-campus activities and define a
maximum of gaps (=0) between them.
Or maybe Time->Activities->"Max gaps per day/week for a set of activities". Here I would define the set of on-campus activities and
define a maximum of gaps (=0) between them.
414---------------------------------------------------------
From Volker Dirr (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4552.0
i think we can see it also with algorithm, but it is a bit work. we need to run through all activities of an teacher. if all his activities are
not available in the same slot, then also the teacher is not available in that slot.
(Liviu: Volker refers to subsequently detecting that the teacher has too little free slots for all his activities, when the user added
a lot of constraints students set not available.)
415---------------------------------------------------------
From Henrique Belo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4568.0
We have to change the teaching time and make sure that the class breaks are not met.
I divided the teaching time into 4, blocks of 15 min, and a class starts at 8:45 am and another at 9:00 am, so it is possible to find the breaks,
but I cannot use the Breaks constraint, because it is common for all students.
I used the constraint A Student’s set not available times, for each class, where I marked the desired breaks.
This constraint does not allow me to use the other constraint that I used a lot, two activities are consecutive, so that I can have one activity
before the break and another after the break.
Is it possible to create a new condition in Breaks to choose classes?
416---------------------------------------------------------
From samantha.goddard (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4571.0
When viewing the group timetables in the 'View timetables / View student timetables / day horizontal' tab, is it possible to hide the long list
of subgroups that appear in each time slot so that the timetable is easier to view?
I am spending a lot of time adjusting the size of the boxes to be able to check for distribution of activities.
417---------------------------------------------------------
From Benahmed Abdelkrim (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4601.0
Can be added this functionality: allow in dialog boxes to select multiple elements once and drag them to the adjacent field. It could save precious time.
418---------------------------------------------------------
From Marcus (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4636.0
I don't know if I am outdated or overlooked. If there is no such constraints mentioned below , may I suggest it.
Some time we may not want the students to move so far away even when the rooms are in the same building. I limited the choices of rooms of activities by manually .ark a set of suitable rooms in the space constraints. The choices are highly based on the distance between rooms but it may be difficult for the users to mention the distance in many ways in the program.
What if we introduce a coordinate system for the rooms so that the program can calculate the horizontal and vertical distance between rooms? And thus set the space constraints based on the calculated distances?
I don't know if this is a practical idea.
Liviu: Marcus also attached a picture to his suggestion, see the forum link.
419---------------------------------------------------------
From nguyenhuuduyet (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4501.msg25772#msg25772
About the FET-MA custom version:
I want when entering the teacher's name will be displayed immediately like the official version.
Example: 1. Enter the teacher's name
2. Add
3. OK
Then the teacher's name will appear in item 4
(meaning the teacher will appear immediately in the list of all the teachers).
---
About the official FET version:
I recommend adding functionality when importing activities in both official and custom versions.
I want the window on import to behave the same as the image I attached (combine the active dialog with the add activity)
For example:
1. Enter teacher, subject, class ... click Add
2. Click OK
3. The activity will appear immediately item 3
If you do this, it will be very easy for the user to observe.
420---------------------------------------------------------
From Fiorellino (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4653.0
Excel/Open Office/Libre Office export of the timetable after it was generated.
See also TODO items #18, #124, #152, #170, #300, #310.
421---------------------------------------------------------
From daviodan:
After you generate, you get a message box: "Timetable generated successfully", with a button "OK". Add another button, "See soft conflicts".
Liviu:
I do not like the idea, but I will write it down in the TODO.
422---------------------------------------------------------
From Nando (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4748.0
In Italian:
Al terzo anno di utilizzo riesco a gestire con una certa facilità le problematiche della mia scuola. L'unico problema sono i tempi lunghi di elaborazione che però credo dipendano dai tanti vincoli presenti, tre plessi, prescuola, docenti in comune con altre scuole, richieste giorni liberi concentrati al sabato e lunedì ecc. L'ultimo orario ha impiegato circa 70 ore ma l'importante è che sia stato fatto.
Nel chiedere se sono normali questi tempi di elaborazione, faccio notare delle cose che spererei fossero migliorate:
1) Perchè e possibile mettere delle eccezioni più restrittive e non estensive? Esempio num max ore buche per tutti i docenti (3), si può impostare un numero inferiore (2) ma non maggiore (4). Idem per numero giorni a settimana per tutti i docenti, si può mettere l'eccezione in meno ma non in più.
2) A mio parere alcune criticità del programma dipendono dal fatto di non avere sufficienti ore disponibili da collocare in alcune classi in determinati giorni (esemio il sabato con tanti docenti col giorno libero mi sono trovato a non avere la disponibilità oraria necessaria per coprire tutte le classi. 12 classi su tre plessi necessitavano di 12x5= 60 ore mentre i docenti disponibili me ne potevano garantire 58) in questo caso il software non segnala niente, semplicemente non porta a termine l'elaborazione. Sarebbe opportuno avere un report che indichi il num. max di ore disponibile nei vari giorni in modo da evidenziare eventuali criticità prima dell'elaborazione.
3) La stampa per "classi", "tempo verticale per giorno" dell'orario ha sempre la prima colonna molto stretta, c'e modo di modificarla?
423----------------DONE-------------------------------------
424---------------------------------------------------------
From Vangelis Karafillidis:
Import not available constraints for teachers and students from CSV files.
Overall matrix view of not available times in the FET interface (DONE).
Also from Fritzlang, on the forum (https://lalescu.ro/liviu/fet/forum/index.php?topic=5010.0):
FET importa alcuni file con le impostazioni principali in formato CSV
E' possibile in qualche modo importare anche le ore di assenza degli insegnanti ossia le ore non disponibili per ogni singolo insegnante
425---------------------------------------------------------
From Vangelis Karafillidis:
1) Define custom sets of teachers and students, and apply constraints for them.
2) Output an HTML-like view of all the constraints. Vangelis also suggests the teachers not available to be displayed in a time horizontal view (DONE).
3) it might be useful.. to add a "locked" button.. in the generated timetables view...
for... "unlocking" advanced manipulations...
"manipulations"... I mean automated but controlled modifications...
and not manual adjustments....
after generating a timetable..
one can open the generated timetable view...
for locking/unlocking activities...
in this dialog... it might be useful to add a button...
(with a "locked" icon)
so the user can open an advanced manipulations dialog...
for example...
it would be useful for the user...
to be able to select a teacher...
and modify the "not available times" from this dialog...
and work with the generated timetable...
the same if selecting for example two activities... which are consecutive, without this being acceptable... in order to add a constraint... and make them not consecutive...
etc...
so.... if the user selects teachers... he should be able to modify the constraints concerning these specific teachers...
if the users selects students...
he should be able to... blabla...
if the user selects SETS OF TEACHERS (the new feature I mentioned)... he should be able to add constraints for the entire selected set...
and the same for activities...
complicated..
but...
I think it would be much more functional for modifying EXISTING (generated) timetables
426---------------------------------------------------------
From bachiri401:
The possibility of choosing the colors in the timetables, instead of arbitrarily assigning random ones.
427---------------------------------------------------------
From Volker Dirr:
Add the possibility of generating multiple with multi-threading for fet-cl (FET command-line).
428-------5) and 6) are partiallly done---------------------
From Vangelis Karafillidis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4795.msg26561#msg26561
4) I think that FET works very well for solving timetables which do not need to be changed/modified during the school year. In my country (Greece),
most of the time teachers are hired "incrementally". So, most Greek schools need to change/modify their timetables around 10-15 times even up until April!
This means that one needs to be able to easily change/modify an already existing timetable. Under this perspective, a new feature of adding/removing/modifying
constraints on a existing timetable (in addition to locking/unlocking activities) would be highly useful. What about other countries? Do you need to modify
existing (FET generated) timetables during the school/academic year or not?
5) Sometimes, I needed to add identical constraints for the vast majority of teachers (for example max hours continuously = 4), while at the same time
a couple of teachers were an exception. I think that a new feature for adding constraints for (predefined) groups of teachers/students/rooms would be highly useful.
6) The constraints teachers/students/rooms not available times sometimes cause problems. I think that adding a button for displaying a report for
all teachers / all students / all rooms not available times would simplify the monitoring of these constraints. Especially, I think that for
rooms not available times with a weight <100, displaying the weight percentage in each time slot would be very useful.
Other suggestions by Vangelis Karafillidis, with replies from Alex Chernous:
DONE in FET-6.4.0.
429---------------------------------------------------------
From bachiri401:
The idea of threads = many instances of fet on the same file
We used to run two (for example) instances of fet with the same file but this file is copied and renamed with a new name so as not to be confused
We run them to generate multiple timetables
One of them may generate 5 timtables whreas the second will genarate only 2 ……….
This new idea of threads is so useful but it should as the previous one:
Each thread is given the number of timtables to generate (should be optional to the user)
Each generated timtable will be given the name (thread number+timtable number) eg 1.1
1.2
2.1 2.2 ………………
430---------------------------------------------------------
From bachiri401:
He suggests that the constraints of type max room changes per week to consider the week as a whole. For instance, if the max room changes per week is 0,
we need to have the same room all over the week. Now the behavior is that on day 1 we can use room R1, on day 2 room R2, on day 3 again R1, and so on.
Liviu Lalescu: I think this is impossible to change now, and incorrect. You could use the constraint activities occupy max different rooms.
431---------------------------------------------------------
From ghani1990 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4795.msg26796#msg26796
1) I have a suggestion in the case of multiple timetables why I should delete the output folder every time, why the files are not output in new folders with
the same name with a number's suffix , 1,2,3 etc.
2) I suggest adding settings to choose the default mode of operation.
Meaning instead of choosing the The mode of operation every time through the menu New, just I go once to settings and i set my default option.
Why should this preferance exist? Because the Custom FET versions are basically each one belonging to a specific country or group, so I think it is better for
me to choose the mode once in the settings instead of choosing every time I create a new file!
Thus, your work is wonderful in the endeavor to collect all copies in one copy, and at the same time it is easy to use the program as if it is directed to a
specific mode.
Of course, these settings are optional, they can be edited by the user, or they can be left as they are now.
432-----------PARTIALLY DONE?-------------------------------
From Volker Dirr:
In src/engine/generate.cpp and src/interface/timetablegenerateform.cpp and src/interface/timetablegeneratemultipleform.cpp, use std::atomic instead of
std::mutex on the Boolean variable testing if the generation was stopped, bool Generate::abortOptimization. And maybe use std::atomic instead of std::mutex
in other places.
433---------------------------------------------------------
From Khelifi Fouad Mohssen:
If I (Liviu) understood correctly, he suggests to make the overall timetable, but to see it separately for each department.
434---------------------------------------------------------
From Darren McDonald and samantha.goddard (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4839.0
For block planning mode:
1) Activities occupy max hours (blocks). For instance, if there are 3 sets of simultaneous activities, the user would like that they occupy at most 2 hours:
FET day 1 FET hours 2 and 3 and FET day 3 hour 3 (suggested by Darren McDonald and Samantha Goddard).
2) Activities not same hour (block) if in different days (suggested by Samantha Goddard).
I do have another suggestion that would help with block planning (that may also be useful more generally). When selecting a set of activities
(for time constraints, etc.) it would be very helpful if there were a way to select all activities that do not have a specific activity tag,
teacher, etc. Would it be possible to add something like a "not" checkbox, or equivalent, to use when filtering activities? Very often with block planning
I have restrictions that should apply to all courses except one, so this would be very useful.
435---------------------------------------------------------
From djm (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4874.0
He suggests the possibility to change the duration of all the activities multiplied/divided by a factor. For instance, if in reality the activities
have duration 50 minutes and they would like an activity to have 5 x 10 minutes duration. So all activities can be easily edited with a single click.
Liviu Lalescu: This would be unfortunately a probably very seldom used facility. The user could use find+replace on the .fet XML file instead.
436-----------DONE------------------------------------------
437---------------------------------------------------------
From Mohamed Ait Ichou (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4940.0
As for the relative weight, which is mandatory to be 100%, it is suggested to hide it from the user because it is not originally allowed to reduce it
to a lower percentage.
438---------------------------------------------------------
From Henrique Belo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4942.0
He suggests to add in the timetable view dialogs, in the details for the activity in the current selected slot, also the constraints which are related
to this activity.
439---------------------------------------------------------
From uni_instructor (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4830.0
The most recent version of FET 6.0.2 does not support ALT-hotkeys for the menu bar.
I have attached two screenshots of version 6.0.2 and 5.49.1
As you can see, FET 5.49.1 supports ALT-hotkeys whereas FET 6.0.2 does not.
Applying ALT+F should open the file menu but there is no reaction.
Liviu: This is done by me. The reason is that on at least one platform, GNU/Linux with XFCE, my computer, the fields with accelerators appear shortened
in a bad way, like "&Institu ... mation" or something like that, when using the new Qt 6. So I decided to remove the Alt accelerators in FET version 6,
considering that they are not used by anybody, since anyway the mouse is much more important in the constraints, where there are no accelerators, and
the mouse is needed almost everywhere.
Also suggested by rjmillett (by email to Liviu Lalescu):
please consider keyboard shortcuts
Like
alt+f for file or similar
alt+d for data or similar
currently we use alt + down arrow, etc to navigate by the keyboard
it helps whenever the mouse gives trouble
440---------------------------------------------------------
From aroby (on forum and by email):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4960.0
Between each two uses of a room from two activities with at least one students set attached to them, leave a pause of 1 hour (or a selectable integer
number of hours). This is done to ensure room sanitation due to Covid-19.
441---------------------------------------------------------
From Khineche Kaddour (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4977.0
sometimes we need to change the weight of "constraint min days between a set of activities" for one teacher or one Subject in one time
so can you please add it in filter ?
(in the filter of changing multiple constraints min days between activities with a single click.)
Liviu: it would complicate the dialog. Instead, you could go to the all time constraints and apply a filter, then you can manually modify
the necessary constraints (I doubt there are too many for a single teacher - hmm, but for a subject there might be many).
442---------------------------------------------------------
From sasbland (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4988.0
I wonder if there is a way to set the colours so that for the same subject, it shows the same colour in both student's and teacher's timetable.
At the moment, we often view the student's and teacher's timetable at the same time when we need to move classes around. It would help very much
if the same subject is in the same colour.
Liviu:
Now the colors are based on subject for students and on subject+students for teachers. We did it like this because usually the teacher teaches the same subject.
I will add this in the TODO list (for the official FET): A selectable FET setting "Color the teachers' activities by subject versus by subject+students".
443---------------------------------------------------------
From ben bacha sami:
1- J'ai plus que 50 enseignants : si je mets limite vide par
semaine (par exemple) pour tous les enseignants =2h
et si je veux qu’un enseignant X a limit vide par semaine =1h , je
dois préciser à chaque enseignant apart (limite vide par semaine=2h)
solution : les contraintes pour un enseignant doit être prioritaires
en face des contraintes pour tous les enseignants.
Même chose pour un groupe et tous les groupes
2- Je suggère -pour les salles d’ajouter :
limite heure / semaine- / jour
limites vide/jours -/semaine
3- Problème d’optimisation :
une école qui possède 12 classes dans un seul niveau
chaque classe possède 3 matières de base –M1-M2-M3
Pour M1 en a 6 enseignants
M2 en a 4 enseignants
M3 en a 3 enseignants
peut-on ajouter a fet une fonction qui peut optimiser l’affectation
des enseignants au classes pour un emploi idéal.
Liviu:
1. If you have max gaps for all teachers = 2 and for a teacher max gaps
= 1, it will work correctly. Yes, you are right for min hours daily,
for instance; in this case you need to add individual constraints. It
is difficult to change now.
2. and 3. are unfortunately too difficult/impossible.
444---------------------------------------------------------
From fartoto_dz2004 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5003.0
i want to suggest a constraint for M-A mode that might be useful for me and others; i hope you can add a constraint that let two different teachers
start at same time (seance) or end at same time.
445---------------------------------------------------------
From ncabello (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5017.0
We work during the year on diferent projects with diferent groups/periods of students. We recently start managing our teachers shedule with FET.
In our case we create a "week" from day1 to day 100. Then on that period we add activities and diferent groups and projects as they come.
Since we configure a period from day1 to day100, we must translate (for example) day1=5/10, day2 =6/10 and so on. It would we great if one could
set starting date and ending date, for example 5/oct/2021 - 12/jan/2022 and also to select wich days of the week to include that would be excelent.
446---------------------------------------------------------
From Phạm Văn Quyền Anh:
Add an ordering number scheme for the constraints list in the main form (for instance:
1.1 Max days per week for a teacher
1.2 Min days per week for a teacher
)
447---------------------------------------------------------
From Thaneswer Patel (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5056.0
Can we give an option while generating a timetable not to print virtual rooms and other empty rooms where no class is assigned?
448----------DONE part 2.-----------------------------------
From Arvind Kumar Agarwal (on guestbook):
1. In set of activities we should be able to add or replace a teacher for a particular class. Presently it changes for whole set. It will help to
assign two teacher for particular class like practical. Also when teacher is on leave, we can assign another teacher for that particular class.
449---------------------------------------------------------
From Bachir Sayah (on guestbook):
If you can add a filter that allows you to manipulate the order of different matters .. for exemple mathematics and physics .. i want them to be
separated by english or french for example !
450---------------------------------------------------------
From Prof info (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5064.0
On the contrary with the constraint "A set of activities occupies max different rooms".
Is it possible to add a constraint
"A set of activities occupies min different rooms"
That allows the activities of a teacher occupies at least in 2 or 3... different rooms from a list of rooms
And if the number of teacher's activities equals the minimum number given as a parameter, each activity will have a different room from the other.
451---------------------------------------------------------
From uni_instructor (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5097.0
Yesterday I had an idea concerning the activity-tags:
When I create new activities I have to add some standard-tags in the majority of all cases.
That task causes many additional mouse clicking. :(
It would be a real help if I could pre-define a set of default tags that will be added automatically when an new activity is opened for editing.
At least a kind of "Add default tags"-button in the "Add activity"-dialog would be helpful. The default-tags to be added can be defined/changed
in the "Activity tags" dialog.
As I see there already exist two "Printable/Not printable" buttons for activity-tags.
Adding two "Set as default / Set as no-default"-buttons would fit well into the "Activity tags" dialog window.
452---------------------------------------------------------
From rjmillett:
it would be helpful if you introduce an import/export option in the
activities dialog so whenever we are setting up teaching periods
we could use this to quickly setup
currently one has to close then go to file -> import/export
453---------------------------------------------------------
From wcmvusd (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5141.msg28550#msg28550
One thing I found is it would be great if there was an 'A Set of Activities has minimum simultaneous in selected time slots' constraint so that
I could group all students into gender groups and set each gender group to have a minimum per period instead of assigning each activity to the
constraint individually. Something like the 'A Set of Activities has a Set of Preferred Time Slots' constraint, but for Min/Max?
Also, on https://lalescu.ro/liviu/fet/forum/index.php?topic=5141.msg28554#msg28554 :
A constraint of 'A set of activities occupies X time slots from selection' would be great.
Liviu: wcmvusd's suggestions refer to adding a filter like in activities preferred times instead of listing all the activities. And the second
suggestions also combines min+max in a single constraint.
454---------------------------------------------------------
From Vangelis Karafillidis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5143.0
Sometimes, the user needs to modify the timetable of a single day because a couple of teachers are absent. It would be really useful, if the user
could export a new .fet file (from the generated timetable) for a selected day. For example, if the user needs to modify his timetable for Monday,
because two teachers are absent, he could extract a new .fet file with
days = 1
teachers the same as the original file
students the same as the original file
and activities the activities of this specific day.
Most of the time constraints should be removed, but some constraints such as teacher not available times, teacher max hour continuously,
teacher max gaps per day, etc could be selected by the user in order to be extracted to the new (generated) .fet file. Then the user could add some
constraints in order to avoid the gaps for the students groups, and generate a new timetable.
455-----PARTIALLY-DONE in FET-6.11.0 22 October 2023--------
From Vangelis Karafillidis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5142.0
Some constraints (such as teacher max hours continuously) need much time to be added. The reason is that the user has to add one by one the constraint
of each teacher (in this example). I was thinking of a different approach. The user could select the teachers for whom the constraint should be
applied/added. For example, if the user has 60 teachers and need to add the constraint max hours continuously to 40 of them, he could just select
these 40 names and add this constraint at once.
See also TODO items #82, #84, and #476.
456---------------------------------------------------------
From Benahmed Abdelkrim:
He refers to the constraints max two activity tags out of N1, N2, N3 in the Mornings-Afternoons mode.
Is it possible to add this constraint for the following general situation: max 2 activity tags from a set of activity tags(?)
457---------------------------------------------------------
From mikkojoo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4387.msg28616#msg28616
mikkojoo refers to the Terms mode:
About statistics, it would be nice to see sums of activities in a term:
1. per teacher
2. per group
even 3. per teacher and subject but this could end up being not very easy to read.
458----------DONE since version 6.5.6 on 2 August 2022------
459---------------------------------------------------------
From Christian (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5203.0
As you know, and as I've seen, printing the tables to paper is a discussed topic through the years.
I'm fine with editing the css. I have a table which keeps the same geometry with colorcoded teachers etc.
But if I generate multiple tables, do I really have to copy my custom css into every folder?
Unfortunately the css has a different name in every folder, so this won't work, I think.
Wouldn't it be nice, to adress a custom css-File or include custom css-commands as a matter of fet project preferences?
460---------------------------------------------------------
From jza3 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5217.0
For the Mornings-Afternoons mode:
We would like to limit the number of activities on a real day based on whether there is a certain tag among these activities or not.
For example, I have tagged certain activities with "tagX". I want the number of activities to be 6 or less during a real day if one of them is tagged with "tagx".
Let's say I tagged math activities with tag "ma". So, whenever there is a math activity (1 hour) on a certain day, I want 5 hours maximum from other subjects to go with that math activity, so the whole number of activities does not exceed 6 hours.
Let me explain better. The Moroccan students normally study maximum 7 hours per real day, not more. What I want is an additional contraint to make students study only 6 hours per real day when one of the hours is a sports activity. In other words, when students have sports, they should study 5 hours + the sports hour, which limits the number to 6 hours only, not the normal 7 hours. I hope I have been clearer.
Liviu, explaining a possible trick (but not perfect):
Add n_activities_of_sport dummy activities for the students set (no teacher, a dummy subject), and then max (real) days between each such dummy activity and an activity of sport = 0. Then I am not sure it works perfectly for the other constraints like gaps, but you might force the dummy activities to be at the beginning or at the end of the day with preferred times, or end students (half) day.
Otherwise it is difficult to implement exactly what you suggest and I cannot think of a good name for a new constraint.
461---------------------------------------------------------
From Vangelis Karafillidis:
when the user generates multiple timetables...
(for example 30 timetables)
there is no way to find which one is each one of them... when viewing the html file... for example... if the one the user has opened is the 4th or the 25th...
Liviu:
you can see the report.txt file or the list of generating, and the number of the directory on the disk is the timetable number.
Vangelis:
what I mean is...
it would be very helpful...
if the user could find INSIDE the html file this information...
let's say...
an indication...
"generated with FET" blabla... multiple timetables no.17
or...
"generated with FET" blabla...
single timetable
Liviu:
I will add this in the TODO
Vangelis:
or... some kind of heading in the html file...
above the Educational Institution...
Liviu:
but not everybody might want this
Vangelis:
at the beginning of each html file...
look...
let's say that a user... has generated 50 timetables..
he opens the html files
in order to compare them and... choose the best for his needs...
he finds the best one...
but...
doesn't know which one of them is the one he has chosen...
for example... let's say that the user has opened 50 files at the teachers time horizontal view...
(this is that I actually used to do....)
Liviu:
OK, I understood
I will add this in the TODO
but the user might want to add the timetable to the web
and he needs to remove this info
Vangelis:
maybe... a dialog in the generation menu could be a solution?
something like "embed detailed info"...
Some more from Vangelis:
I could just batch rename the files
I think that there are some tools that automatically rename files...
when generating multiple timetables..
the directories are named 1,2,3 etc, aren't they?
could they be named (for two digit generations, for example 32 timetables) 01, 02, 03, etc
or for three digit multiple generations 001, 002, 003 etc?
an option in the multiple generation dialogue?
is it possible to implement it?
Liviu: It could be implemented, but also the timetables are not 1, 2, ..., n, n+1, but some numbers
will be missing.
462-------------DONE----------------------------------------
463---------------------------------------------------------
From Mohamed Ait Ichou (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5240.0
Is there a possibility to add a maximum real day restriction for teachers that does not exceed a certain number of hours, meaning that
the user determines the number of hours to which the restriction will be applied.
YOUSSEF HOUIET:
We need something like this:
automatically add constraints "Max days per week for teacher" from number of teacher hours
Nbr days= roundup(Nbr hrs modulo 4)
If
16< nbr of theacher's hours <=20
Then
Max half days: 5
12< nbr of theacher's hours <=16
Then
Max half days: 4
...
464---------------------------------------------------------
From ngoctp29121982:
In the teachers dialog, add the possibility of seeing and modifying the constraints of each teacher.
465---------------------------------------------------------
From Mohamed Ait Ichou (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5252.0
Is it possible for teachers to be grouped according to subjects?
466---------------------------------------------------------
From Phạm Văn Quyền Anh:
Suggestion to add constraints: "Max span per day for a/all teacher"
for Morning-Afternoon mode
The goal is that if there is a lecture at the beginning of the day,
there is no class at the end of the day, and vice versa
467---------------------------------------------------------
From ngoctp29121982 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5264.0
I have a proposal to add subject groups to have the teachers divided into different groups. For example: Math, physics, chemistry, biology teacher,
he belongs to the Science and History group, Geography, civics belongs to the Social Sciences group... The purpose of dividing into groups is to add
Constraints or view the constraints of the group. It's easier for teachers in specialized groups.
468---------------------------------------------------------
From muhmath2023 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5284.0
suggestion for update fet gui :
in some screens buttons up and down are missing please add this
enable crtl and shift to delete more than one item at once or select more than one item
other suggestion
we need option to print double lessons in html results as singles
469---------------------------------------------------------
From ayreon (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=4801.msg29273#msg29273
In the past I had the need to modify the split of some activities so I created a small program to do so, maybe you can do something similar in FET?
Removing a subactivity is easy, just delete it and change the total duration of the owner, when I need to increase it I create a new subactivity
with a new ID that is computed as the maximum ID+1, this way ID are preserved and all works well. Optionally, I recompute all the IDs (to make them increasing)
preserving constraints links
470---------------------------------------------------------
From YOUSSEF HOUIET (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5304.0
In the window of multiple generation of tables, is it possible to add a text field or label to display in real time the maximum of the activities placed
among all the generations started, and also the id of the generation concerned, to know which is the best generation, without perusing each time the tab
of generations.
471---------------------------------------------------------
From Amine Bouhmad:
In the Add activity dialog, add two buttons: add (select) all teachers and add all students sets.
472---------------------------------------------------------
From attaciro (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5325.0
Italian:
Avrei una domanda, una volta generato l'orario è possibile stampare per ogni classe tutti i docenti inseriti per quella classe?
English translation by Google Translate:
I have a question, once the timetable has been generated is it possible to print all the teachers entered for that class for each class?
473---------------------------------------------------------
From Moissa213 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5258.msg29410#msg29410
French:
Je demande à Monsieur Livio de faire quelque chose pour faciliter le diagnostic des erreurs qu'on commis nous les utilisateurs surtout dans la phase finale
souvent le travail est bien fait mais le logiciel ne produit l'emploi du temps.parce que on souffre dans la phase finale on teste beaucoup de choses pour
trouver la cause du blocage.
English translation by Google Translate:
I ask Mr. Livio to do something to facilitate the diagnosis of the errors that we the users made especially in the final phase often the work is well done
but the software does not produces the schedule. because we suffer in the final phase we test many things to find the cause of the blockage.
474---------------------------------------------------------
From Salvo2 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5334.0
Italian:
E' possibile ricavare (vedere, stampare) una statistica dei giorni liberi: vedere per ogni giorno della settimana quali insegnati sono liberi, non disponibili?
Non riesco a trovare la funzione nel menù.
English translation by Google Translate:
Is it possible to obtain (see, print) a statistic of the days off: see for each day of the week which teachers are free, not available? I can't find the
function in the menu.
Liviu:
Maybe in the timetables, Teachers' Free Periods.
Salvo2:
Italian:
E' possibile invece vedere l'elenco dei giorni liberi, prima di generare l'orario? Quando non si riesce a generarlo?
English translation by Google Translate:
Is it possible to see the list of free days instead, before generating the timetable? When can it not be generated?
475---------------------------------------------------------
From Sauro (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5333.msg29443#msg29443
Since sometimes the software runs over nighttime or unattended anyhow, expecially when runs multiple timetables, it would be nice to have the option
to turn-off PC when done.
See also item #25.
476---------------DONE in FET-6.11.0 22 October 2023--------
477---------------------------------------------------------
From Dao Anh Van (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5349.0
For example, after block A, there are classrooms from A1, A2, A3, A4, A5.
To constrain a teacher X who has no Friday lessons in block A.
Then must be bound in turn:
Teacher X does not have class on Friday in classroom A1.
Teacher X does not have class on Friday in classroom A2.
Teacher X does not have class on Friday in classroom A3.
Teacher X doesn't have class on Friday in classroom A4.
Teacher X does not have class on Friday in classroom A5.
All five of the above constraints can be replaced by one as follows:
Teacher X doesn't have class on Friday at block A.
(So in the process of creating constraints scheduling will be faster)
(Liviu: I think Dao Anh Van refers to space constraints of type "a teacher+a room's not available times".)
478---------------------------------------------------------
From fartoto_dz2004 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5364.0
Thanks for the constraint "min resting hours between morning and afternoon for teacher(s)" in M-A mode but if you can modify the weight to be
between 0 and 100 like that the program will test if it can achieve the condition otherwise the program will not give any or less resting hours
(meaning let the constraint be crashable).
Liviu: Unfortunately, this is probably very difficult or impossible to make, but I'll write down your suggestion.
479---------------------------------------------------------
From Phạm Văn Quyền Anh (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5366.0
I have a problem
After arranging the timetable
fixed schedule on Monday, rearranged schedule from Tuesday to Friday (the school is adding teachers). I used the lock and unlock function in the FET.
However, when adding teachers and activities, I cannot see the timetable (which days are locked and which are not). This caused me to use sketches
(pen and paper) to record actions, which I did wrong and had to redo many times.
Checking in the "All time contraints" section is difficult when the number of activities locked in a day is large but sorted by list (up to 50)
On the other hand, many people who don't understand FET well will also have difficulty when some activities are locked but cannot be viewed in the
teacher/student interface, affecting the binding resulting can't create new timetable
Suggestion: Can view/check locked activities (no need to Generate new timetable) in teacher/student interface or any other way can easily view and
check locked activities easy way by matrix
480---------------------------------------------------------
From Abidine Premier (on Facebook):
We ask you to add a button to know the number of teachers who will be present in the institution every day, morning and evening (after producing the class schedule)
481---------------------------------------------------------
From Phạm Văn Quyền Anh (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5386.0
When adding the constraint "A student set's not available time" to each class I have to count the number of available spaces multiple times.
It is possible to add an automatic space (allowed) counting function available in the "student set's not available time" interface so that the user does
not have to re-count when the number of lessons is sporadic
482---------------------------------------------------------
From ngoctp29121982 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5413.0
Fet already has class card N1,N2,N3 so how can I add a teacher card.
For example, teachers 1,2,3,4,5,6 tag a few periods, teachers 7,8,9,10,11 tag full periods. Then I only need 1 constraint: the card for a few lessons teaches up to 4 days, and the card with full lessons teaches up to 5 days. That way it is much faster and more convenient.
If so, the binding for the teacher is much faster than if I go to create each binding, teacher 1 teaches up to 4 days, teacher 2 teaches up to 4 days, teacher 11 teaches up to 5 days,....
483-----------DONE since FET-6.7.4 on 2022-11-27------------
484-----------PARTIALLY SOLVED in FET-6.7.3 on 2022-11-23---
From math (on forum), bug report:
https://lalescu.ro/liviu/fet/forum/index.php?topic=5422.0
I have a weird problem here with FET that is reproducable with the currentmost version (6.7.2) of FET. I configured a relatively small timetable with only 23 activities which succeeds to compute after some minutes of compute time.
Then I selected "Timetable -> Advanced lock/unlock -> Lock all activities of current timetable" for locking all assignments of starting time and rooms to the activities.
Now the weird part is happening. I expected that the schedule now can be recomputed in an instant, since all time/space assignments are locked (at least this is my experience). But instead FET is displaying an error message saying that the current timetable cannot be computed.
If I remove the time/space locks of all activities, the schedule becomes computable again (after some minutes of runtime).
In my eyes this behavior is a little bit surprising. Shouldn't a schedule be computable if all activities are locked directly after a successful generation?
Liviu:
Thank you for the report!
I think I know where it comes from and I was hoping this will not show in the real life. Unfortunately it might be a feature and not a bug and remain like this in the future.
First of all, please send me both your input .fet files (here, archived, or to fet4 att lalescu.ro).
I think you have 2 impossible constraints with 99.9999%. Let me explain: in the fixed timetable, FET tries to put an affected activity in the fixed slot 400,000 times (this is a FET constant, chosen by compromise), each time trying to break the constraint. It will break the constraint in 0.0001% of cases on average. So again on average FET needs to try at level 0 a number of 1/0.000001=1,000,000 times. So, in some more cases it will fail and in some few cases it will succeed (you can try to generate multiple and check that indeed in some cases it will succeed).
I really don't know what to do for sure. I think keeping the current behavior is the best. Increasing that 400,000 1000 times (to care even for weights like 99.999999%, which is the maximum precision in FET) would be not good, because the program will seem to freeze for some really impossible timetables. Increasing this value maybe 10 times, so that it will solve your file, might not be too beneficial also.
The temporary solution is to decrease the weight from 99.9999% to 99.99%. This is also a very strong constraint. Or on the locked file you can disable these two impossible constraints.
Please send me both your files (unlocked and locked), I am very interested. And I'll think about it. Maybe it would be good to add your bug report in the TODO, what do you think?
More precise calculations: since FET needs to break a 99.9999% constraint and is trying 400,000 times, the probability to fail the generation is 0.999999^400,000~=0.67. So the probability to succeed the generation (breaking the constraint in at most 400,000 tries) is ~=0.33, or 33%.
math:
I just mailed the fet input file to the specified email address. In this file all activities are locked so that the schedule cannot be computed. If you unlock all activities and wait for some minutes, the schedule will be generated successfully.
You guessed correctly: I have some constraints with 99.9999% significance. I will change them to 99.99% and check if the problem still occurs.
Regarding the underlying problem:
If time and space is locked for all activities of a schedule, this means that the user wants to have the schedule in exactly this way. This means that there is nothing to compute for FET, but just to check the schedule against the specified constraints.
But since all activities have been locked for space and time, this is just a validation and not a computation. So can't all constraints with less than 100% significance simply be left out of consideration in this situation?
Liviu:
Yes, exactly as I imagined. If you try more times on your original locked file, it will generate, in the end. And if you go to 99.99% for all constraints, the time to generate the unlocked file will be much shorter and the results will be the same (those pesky two impossible constraints barrier - but not always the same two constraints or two activities).
You are right. A locked file/timetable should not be checked, theoretically. Unfortunately, when Volker came with the idea of locked activities, we used constraints activity preferred starting time constraints activity preferred room. We don't have a global parameter "This timetable is fixed and constraints with weight strictly <100% should be ignored".
Maybe such a global parameter would be a solution? But there are many problems with it, such as users locking partially generated timetables, or adding activities after locking a timetable, or... .
I'll think about it and add this problem in the TODO.
Liviu: I increased the retries at level 0 to 2000000000 and now the file is solvable (unfortunately, not instantly). I cannot see other solution.
485---------------------------------------------------------
From Darren McDonald:
I wonder whether it would be possible to make the Block Planning version of FET easier to use. In order to do this, I wonder whether it would make sense to separate the
"Block Planner” from the other FET versions.
I have two reasons for suggesting that a “Block Planner” be separated from FET.
Unlike the other FET modes, someone using the Block Planner is often going to then need to use one of the other FET modes as a second step (this is how I’ve been using
it). Making the transition from the Block Planning mode to (in my case) the Official mode requires quite a bit of manual work (much of which I accomplish using a Python
script to take the csv file output from the Block Planning mode to create a student csv file and an activities csv file that can then be imported into a file using the
Official mode). I’m sure it would be very helpful for other users to have an option within FET that would automate this process. Within this “Block Planner” it would
ideally be possible, for example, to specify that the course(s) assigned to Block A have a “2+1+1+1+1” structure, Block B courses have a “2+2+1+1” structure, etc.
This extra information wouldn’t be relevant to the other FET modes, and I don’t know whether or not it would be easy to add, say, another tab for entering this sort of
information that would be available only in the Block Planning mode.
On the other hand, this sort of Block Planning software would be useful for those who don’t need to generate a timetable as a second step. For example, in my school at
the start of our school year the Outdoor Education department organized several days of camp activities. Students fill out a Google Form (that yields a csv file) in which
they choose what they’d like to do (hiking, mountain biking, rafting, etc.) and then the Outdoor Education department has to assign them to groups and times like
“Morning Day 1”, “Afternoon Day 1”, etc. This is a task perfect for the Block Planning mode of FET, but, of course, the members of that department don’t know how to use
the regular version of FET, and it’s difficult to explain to someone how to use FET in this way because the language used in FET is written for the other versions
(“Days” are really teachers/events, “Activities” are really individual student choices, etc.). For those users who only need to create groups with students and teachers
assigned to a time slot, the Block Planning mode is challenging to learn, and a dedicated Block Planner could be written with language that matches the “real” meanings.
Thus would make it easier for a beginner to use if creating these sorts of groups is all they require.
486------DONE, Volker wrote TSC (translation source check)--
487---------------------------------------------------------
From Vangelis Karafillidis:
I am thinking if it's possible to add some buttons regarding already implemented features of FET in the window "View teachers time horizontal timetable"
in order to facilitate the modification of the already generated timetable.
Is it possible to add a button at this window... for deactivating/activating selected activities?
Liviu Lalescu:
It is possible, but it is bad to mix the data with the timetable.
488---------------------------------------------------------
From infoo_ (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5461.0
I was thinking about a little improvement. When FET is opened, a blank timetable is set by default (named Untitled on the top left corner).
I go to File > Open... > and select what FET file I want to continue working.
After I opened the file, the Print option is not available. It says "Please generate, firstly".
However, yesterday I have generated a timetable and in the timetable's folder it has all .html files. Everything is correct.
So I suggest that the Print option is enabled so that the print view can be accessed more quickly, instead of having to search for the containing folder on the computer.
I think this can prevent certain people who are sparse, not knowing that a folder is created on the computer, from regenerating the timetable and losing the distribution
they had achieved after closing FET.
Liviu Lalescu:
The suggestion is good, unfortunately it cannot be solved elegantly, because the input data is different from the timetable.
But: For each successfully generated timetable, you have in the results directory the file filename_data_and_timetable.fet. This file will be overwritten only
on successful generations. For partial timetables it will remain the same from the previous successful generation. So you can open it and generate with FET on it.
It should generate in an instant and provide the same timetable.
489-------------DONE in FET-6.11.0, on 25 October 2023------
490---------------------------------------------------------
From Vangelis Karafillidis:
A bug report, which is unfortunately a feature: say he wants to remove the day Monday (the first of the week). Then, if a teacher was not available at
some hours on Monday, he will now be not available at the same hours on Tuesday.
(He would like to remove 4 days and leave only 1, so that he can do substitutions for this day. But this is impossible with the current code.)
491---------------------------------------------------------
From castonepatha (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5469.0
castonepatha:
It would help us a lot at school if we could display the ID of the activity in the html page of the schedule.
Liviu Lalescu:
I implemented this as a custom version for him.
castonepatha:
It would be great if you will implemented this function in main version as well. Or with some possibility to turn it off and on.
Liviu Lalescu:
I will write down your suggestion in the TODO list. It is not at all difficult, but until now we did not consider it useful -- on the contrary, we considered that
it might clutter the timetables.
castonepatha:
It is really very useful. Mainly for the back check of activities and subsequent corrections. Imagine that someone sends you requests for changes. For me,
the ID is more important than the subject name (more repeated subjects and groups). It can be solved in a different way, but it will be great this way.
492---------------------------------------------------------
From ngoctp29121982 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5475.0
ngoctp29121982:
Maximum number of teaching sessions per week for one teacher and the like:
According to me There is 1 more filter button, sort by number of operations ascending or descending, For example: 2,4,5,6,7....... and much easier to control.
Do the same thing when importing from csv: the teacher has 12 activities to give away 3 sessions.........
Liviu Lalescu:
I don't understand, sorry.
ngoctp29121982:
Maximum number of teaching sessions in a week for 1 teacher
In this constraint, there is a dialog box to sort the teachers with the number of lessons from small to large
493---------------------------------------------------------
From ngoctp29121982 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5478.0
Add a constraint on the maximum number of evenings in a week using a CSV file:
Adding the maximum number of sessions or the maximum number of days in a school week is very time consuming because it cannot have a dialog box to filter.
You say there are many dialog boxes in FET software, but I find all the dialogs you create very useful. Now we teachers from Vietnam really want you to create
that dialog box and add the constraint of maximum number of nights or maximum number of days in a week using a CSV file.
494---------------------------------------------------------
From Volker Dirr and Liviu Lalescu:
Liviu Lalescu:
What do you say, should we consider import/export of constraints as CSV/text?
Volker Dirr:
As you know i suggested myself to write a new csv import.
But my idea is/was NOT to single constraints, even that is the "FET
style". But there are too many and it the "FET style" is maybe
complicating things, since they allow to much.
In my opinion it is useful to write (a second) the teachers.csv import.
This time headers are fixed, but number of fields is optional.
So you can still import teachers with the old csv export file format.
But now optional fields can be added. Of course they must be fixed and I
think only importing 100% weight is enough (or if you want/need more:
only one constraint with weight X can be added; OR if you want more: 2
constraints can be added: 1. with weight 100%, the other with X%; or if
you want more: I fear then the "FET style" is needed. But in my opinion
that is much too much)
So for example we set the head like this:
name; max number of hours per day; min number of hours per day; ...
So you can import:
teachers1
or
teacher2;5
or
teacher3;5;2
So always with 100%.
If you think more is needed, then maybe variant 2:
name; max number of hours per day; weight maxnhpd; min number of hours
per day; weight minnhpd...
So you can still import:
teacher1
or
teacher1;5;100;2;50
...
Or if you think that is not enough variant 3:
name; max number of hours per day 100%;max number of hours per day;
weight maxnhpd; min number of hours per day100%; min number of hours per
day; weight minnhpd...
So you can import for example:
teacher1;5;4;40;2;3;50
Disadvantage is of course you can't do everything, but i think for
everything you should use the xml file.
Advantage of these Variants is that they are sticking data together, so
it will be easier for a human to edit that csv files.
Volker Dirr:
in fact i think it is a also a good idea if someone code an alternative
GUI:
it should contain only 3 big tables (teachers, students, activities) and
not all that single constraints. All constraint should be added in this
3 tables.
So like Variant 3 that i just de scripted. Of course there are many
constraints, so a lot of empty fields. That can be solved like in the
activities planning tab: Display only the used constraints. Of course
change like in the activities planning and show all (constraints). I
guess in a few schools that might be still to large, so a 3th option
like displaying selectable constraints will be helpful.
It is true, by this we will loose a few features. Currently it is
possible to do stuff like this:
teacher A, min 2 hours per day=100%;
teacher A, min 3 hours per day=50%;
teacher A, min 4 hours per day=10%
teacher A, min 5 hours per day=5;
...
While my variant allows only 2. But i think the other are not useful. If
there is really a good reason for a third constraint like this, then the
interface must get a new line/column for this.
Also the requested sorting (see
https://lalescu.ro/liviu/fet/forum/index.php?msg=30166 will be easy in
that case: just clicking into the table header. Qt can sort
automatically tables like that. (compare like i done it in TiTiTo and
StElTo). I guess in that case a CSV might be also unneeded, since you
can edit in FET quicker/nicer.
If a new CSV is added we should also rethink about how to care about
adding/deleting items. Currently it just add. Maybe (optional) it should
also delete existing teachers, students, room, activities, constraints
if they are missing? Or maybe optional remove them if they got a value
0. So if teacher A get min 0 hours per day with 100%, then the
old/existing min hours per day with 100% should be removed. (So 0 is
different from empty. 0 = remove, empty = keep it).
(Maybe it other way around is better?
0 = keep old one and empty is remove.
I am not sure. Both variants have got different advantages and
disadvantages.)
Liviu Lalescu:
Min hours daily is only with 100%.
Max hours daily is recommended with 100%, but can be any. To generate,
the resultant of all them must be convertible to two constraints of this
type.
495---------------------------------------------------------
From rjmillett:
*Kindly put an import from (csv) file BUTTON on the main button page,
activities dialog page*
*i have to go file imports -> ->*
Liviu Lalescu:
Thank you for the suggestion! Unfortunately, I don't consider this to
be added, because import is used seldom, and there is not enough space
in the shortcuts buttons and in the activities dialog.
I will add your suggestion in the TODO. Please confirm me you were
thinking about adding import from CSV to two places: shortcut buttons
and activities dialog.
rjmillett:
either place would be of help
Especially when setting up a new timetable importing from a CSV file makes
the process a lot easier
in the activity dialog if you're considering would suffice
At our school the timetable gets changed quite often especially when
teachers retire or leave and new ones are appointed
And most often I start with a new empty FET file and set up a new timetable
I work with a blueprint in excel, import the information into a CSV file
then use FET to import the activities from the CSV file
496---------------------------------------------------------
From castonepatha:
For his institution, he needed the students to have their onsite activities on maximum two consecutive days. The onsite activities are specified by some activity tags.
He has many students sets. The solution would be to add many constraints of type max 1 days between activities, but it is difficult and error-prone to add them manually.
A custom solution was done for him, but he suggests implementing this customization in the official FET.
497---------------------------------------------------------
From CarolStott (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5547.0
Is there an option for putting custom colors for subjects for students, years for classes, etc.? If not, may I suggest this as a feature?
Liviu Lalescu:
Could you please clarify a bit your suggestion? Do you mean "colors for subjects, students, rooms"? Or something else?
In the HTML results, if you generate with level 7 (colors), there is a CSS file. I looked over it and the first short list of colors is for subjects. This will
appear in the students' timetable. I admit it is difficult to change manually those RGB values. Then follows a longer list of colors for (subject+students).
This is unfortunately even more difficult to change, being longer. It will appear in the teachers' timetables.
CarolStott:
My suggestion is for colors for subjects (for the ease of students) and students (for the ease of teachers), and to be able to change this directly in the UI
(using HEX/RGB/CMYK codes, etc), rather than through the CSS/HTML files.
498---------------------------------------------------------
From Henrique Belo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5552.0
We are currently working on ending the school year and arranging all student timetables to ensure that all classes finish on time.
To achieve this, we replicate one timetable for 6 or 7 weeks to determine the number of classes of each subject required to complete the total number of classes.
I have noticed that having a button to deactivate an activity in the timetable view, just like the one that currently exists in the activities section,
would make it much easier to manage timetables, we can manage this by see the activitie ID and going to the Data-> activities and Deactivate, but in the
Timetable view is better and fast.
However, it should be a note saying that deactivating an activity could have certain limitations that might prevent the timetable from being generated correctly
because some related constraints.
499-----DONE ordered pair, in FET-6.19.0, 15 March 2024-----
From victorcapel (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5561.0
Liviu Lalescu's words:
Add the constraints teachers/students min gaps between building changes per real day and/or
the constraints teachers/students min gaps between ordered pair of activity tags per real day.
500---------------------------------------------------------
From Neury Nunes Cardoso:
On the teacher's schedule grid visualization screen, could there be a
function in which it was possible to mark activities to be grouped? It
would be like this, the user would mark the activities with CTRL+Click
and then have access to a button to insert the group of activities that
would always be together (2 or 3 activities that are already existing
functions).
Volker Dirr:
>>>> hmm... I fear i don't understand 2 parts of your mail (since i
>> don't
>>>> know your dataset and constraints). That is why i can't give a
> good
>>>> feedback.
>>>>
>>>> So your "grouping" is "only" needed to have a rotation that look a
>>> bit
>>>>
>>>> similar to the old timetable?
>>>>
>>>> Why are you rotating schedules?
Neury Nunes Cardoso:
>>>> I believe that the way of organizing the schedules, between my
>>>> reality here and yours there or in other places is very different
>>> but
>>>> I will clarify a little more how I use the FET.
>>>> My base of the FET file is formed only by the registration of
>>>> professors and their availability for 1 semester, in addition we
>>> feed
>>>> the FET with the set of disciplines of our courses, there are more
>>>> than 20 undergraduate courses. These courses use specific teachers
>>> and
>>>> common teachers because our courses are organized in cores, such
>> as:
>>>> Technology
>>>> Management
>>>> Health
>>>> Social Sciences
>>>> Art and Creativity
>>>> And others ...
>>>> The structure of the students is organized in Units / Shifts /
> Days
>>> of
>>>> the week and when we rotate the schedules we do this for all
>> courses
>>>> of a given semester, for example 2023.2 (second semester of 2023).
>>> So,
>>>> there is a need to organize teachers' schedules to optimize their
>>>> occupation, since a large part of them also work in other
>>> educational
>>>> institutions. It is a complex system that may not be a reality in
>>> all
>>>> locations. FET gives me this flexibility because it is a “blank
>>>> canvas” where we can create structures that adapt to different
>>>> realities.
Volker Dirr
>>> I am not working at a university. Just at school (pupils age
> 10-16).
>>> And
>>> even schools here have a lot of different ways how to do it. I
>> always
>>> just try to understand it and try to think how to do it better. Of
>>> course i can't always find a better solution, but i already found
> it
>>> several times.
>>>
>>> I read your post, but i must admit i still can't see why "grouping"
>>> later that ways is useful. I understand why grouping before
>>> calculating
>>> might be useful.
>>>
>>> In normal case I care about "teachers' schedules to optimize their
>>> occupation" by using not available times, max gaps per day and
> week,
>>> max
>>> days per week, max hours per day, min hours per day, min days
>> between,
>>>
>>> max room changes, spread the activities well, ... but not grouping
>>> something that was randomly grouped only. It sounds for me like a
>> min
>>> gap will affect the same much better then grouping.
>>> I must admit that i still don't understand the reason.
>>>
>>> I will forward your suggestion to Liviu, but i guess he will max
>> write
>>>
>>> on the TODO list.
Neury Nunes Cardoso:
>>> Yes,
>>>
>>> We really live in different realities, neither better nor worse,
>> just
>>> different, lol
>>>
>>> Maybe I can explain it better like this:
>>>
>>> Looking at this screen, imagine that I want to keep activities 169
>>> and 133 from Thursday / morning always together in any order. In
>> this
>>> same splint I would just mark the activities and then access a new
>>> button in the upper right corner of the interface that would
>>> automatically take me to the routine performed by the menu option
>>> highlighted below:
Volker Dirr:
>> I understood your request.
>> I wrote it to Liviu. He added it into the TODO list.
>> I won't code it, because...
>> a) there are a lot of other constraints that might be added like
> this
>> (so if we add it, then it should be done similar for the other
>> constraints also)
>> b) i can't see an advantage. What is the advantage? In my opinion it
>> is
>> a disadvanatge, since guy will try to add a lot of constraints like
>> that, making the timetable maybe even impossible, but for what
>> advanatge? The only advanatge is that the teacher has "randomly"
> again
>>
>> the same activities grouped?
>>
>> Maybe Liviu or an other guy will code it.
Neury Nunes Cardoso:
>> I really appreciate your attention in understanding the suggestion
> and
>> sharing it with others, but the advantage for me is that, due to the
>> way I use the tool, I don't know in advance which are the best
>> groupings for a given teacher, in fact I put the activities without
>> consider no grouping for teachers, only for students, as they can be
>> from different groups. Yes, the tool suggests random groups of
>> activities, but they are not always the best to optimize the
> teacher's
>> use, so my proposal would be, starting from the grouping created by
>> the tool, to refine this grouping by visually analyzing the
> teacher's
>> distribution and using the tool to ensure an optimal grouping to
> serve
>> students and teachers, remembering that teachers are not exclusive
> to
>> the school, being able to work in several different schools
> throughout
>> the week.
>> But I thank you again for the time you dedicated to listening to me
>> and understanding the suggestion even if it doesn't seem useful, and
> I
>> reinforce how much I like the tool !!
Volker Dirr:
> FET can't know what "good" grouping is, since it doesn't know how to
> detect good groups.
>
> So you know rules how to group. Do you mainly detect them by knowing
> "good" activities that should be grouped or by detecting "bad"
> activities that shouldn't be grouped?
>
> I just ask, because there might be much better variants to improve
> your
> timetables. Maybe it is a good idea to add diffrent activity tags for
> the actvities and then you in need a new constraint like "activities
> with the same activity tag should be grouped for teachers" or the
> oppistite: "activities with different activities should never be
> grouped
> for teachers"?
Neury Nunes Cardoso:
> I think I understood what you wanted to say.....
>
> So I can create some tags with specific names to define these groups
> before running the times, so the FET will already consider these
> groups "tags" in this process.
>
> I think the concept is good and I can try to do it this way in the
> next works. What I do is exactly the opposite, because when I load the
> activities to the FET I load them in full from several courses and as
> a single teacher can be used for more than one course, his activities
> are spread out in the structure of the activities, perhaps a good idea
> is load them ordered by professors and not by courses. However, the
> method I use of loading without worrying about the groups and then
> visually identifying the best groups in the teachers' grid allows me a
> better analysis. The inconvenience is that I have to go back to the
> main menu to access the routines for defining groups of 2 or 3
> activities grouped together on the same day.
>
Volker Dirr:
Currently it is not possible to do it that way, since there is no such
constraint yet.
But if you think that the concept is good, i will suggest Liviu to add
those concepts.
The disadvantage is, that it won't work if you already use activity tags
for other stuff.
Also a disadvanatge is, that it is a bit more more if you do it the
first time.
But in my opinion there are 2 big advanagtes:
It is a more general constraint and once you added it, it will be much
easier to generate timetables in the next works.
I can see your current disadvantage if you do it with the current FET
version,
but your suggestion is too specific. If it should be added, then it must
be added more general.
So it must be possible the same way for other constraints and it should
be also possible in the ohter views (teachers and rooms).
501---------------------------------------------------------
From wojgp (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5597.0
I think the missing option is to set by one click that a splitted activity should take place in the same room.
For example physical education has rooms PE1, PE2. Group A has 2 hours of p.e., but first takes place in room PE1 and another in PE2. In this time group B has only one hour of p.e. and it is assigned to PE1 while it could take place in PE2. Thanks to this group A could have 2 consecutive hours in room PE1.
Temporary perhaps it could be done by adding subactivities of the same type (2 x 1/2) as a one constraint. Unfortunately when there are a lot of splitted activities there has to be a lot of room constraints entered manualy.
Perhaps there should be an option to set room constraint for a whole activity. Now I have to group all subactivities into constraint as on attached picture. All activities in my case are phisical education :) I don't want students to change room for consecutive activities.
Is there any option to do it in easier way ?
Liviu Lalescu:
A better approach might be to use the constraints activities occupy max 1 different rooms (so even if not consecutive they have the same room).
Unfortunately, there is no easy way to implement this.
502---------------------------------------------------------
From wojgp (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5598.0
1. Activities dialog
I miss the option to sort by Teacher's name, currently sorted by ID ONLY.
2. Students
Students
In add activity I see all options except one.
My groups are listed by Years : 1,2,3,4,5 and then each is divided:
category 1: A, B, C, D, E
category 2: Girls, Boys
category 3: (1), (2) -division into languages and computer science (1 for novice and 2 for expert) :)
In activities I can assign whole year like '1', '2' etc
Certain class: like "1B" which is a group of girls and boys
Selecting a subgroup with label "1 Girls" selects all girls from all 1st classes which is 1A, 1B, 1C, 1D, 1E classes
Selecting a subgroup with label "1A Girls" selects all girls from 1A class only
Selecting a subgroup with label "1 (1)" selects all students assign to (1) subgroup from all 1st classes which is 1A, 1B, 1C, 1D, 1E
Unfortunately I cannot select particular subgroup 1A (1), 1B (2) etc., so instead of 1A (1) I have to select:
1A Girls (1)
1A Boys (1)
and instead of 1B (2) I have to select:
1B Girls (2)
1B Boys (2)
It would be good to allow all possible combinations and add necessary number of check boxes for displaying subgroups within a tree (cat 1, cat 2, cat 3, cat 4 ...)
3. Teacher home rooms
- Missing option to select a group of Rooms (left window) to move into "Selected" table easily and quickly.
I have to add one by one and it is easy to miss something clicking that way :) Maybe it would be quicker to select with check boxes and then copy selections from one constraint into another (clone).
There are activities to which I want to assign all existing rooms or rooms except specified. I have to click all constraints one by one.
Possibly it would be more convinient to combine rooms into categories (groups).
Example of groups:
a) Any subject room
b) Room for dedicated subject and any - math rooms, chemistry rooms etc., but also can handle other subjects
c) Gym room
4. List of Rooms
Missing option to sort in alphabetical order. 'Sort' button does not sort in alphabetical order. Currently after sorting I have 1,14,15,16,17,18,19,2,20,21... etc
Liviu Lalescu:
About (2.): you could create additional groups, with the option Add existing subgroup, so only click on the subgroup. Then use these groups in the activities.
About (4.): your suggestion is a kind of numerical ordering?
wojgp:
ad 2. I added a lot of groups manualy.
The only missing thing is a possibility to sort it in "Add activity" window as on the attached screen.
Also when generating time line I get multiple subgroups - screen shot attached.
Although I entered all divisions I had to add a lot of subgroups manualy. It would be really great to be able to add these combinations automaticaly.
I've already created all the groups manualy, but maybe someone will need this feature.
503---------------------------------------------------------
From ngoctp29121982 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5588.0
Adding Nam|Binh|An|An directly from the lecture button on the FET software, so users will add more lectures with more teachers faster.
An activity split into 4 components, each having different teachers. In FET-6.9.3 it was introduced the possibility of dealing with this
from the export/import CSV activities, but not from the interface.
504----DONE in FET-6.11.0 released on 25 October 2023-------
505---------------------------------------------------------
From Mohamed Ait Ichou (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5606.0
Is it possible to improve the max half days between activities constraint by adding the constraint for all teachers at once but in a way that each teacher is divided separately?
506---------------------------------------------------------
From Vangelis Karafillidis:
(see also item #312)
Constraint two sets of activities share min/max common time slots from selection.
They are very rarely used, but they might be useful.
Example for min:
We have the following activities (teacher-group-subject)
John A1 Math 4 hours per week
Mary B2 History 3 hour per week
George C1 Physics 3 hours per week
Vangelis C4 Chemistry 2 hours per week...
We need any of the 2 hours of Vangelis (1 of them) to coincide with ANY of the hours of John, Mary, or George...
507------------DONE FOR TEACHERS AND STUDENTS-IN-FET-6.11.0-
From Vangelis Karafillidis:
(see also item #323)
He proposes a time horizontal view of all the teachers' not available constraints. Also for students and rooms.
Liviu Lalescu: what about the rooms with <100% or multiple not available constraints (which is allowed)?
Vangelis Karafillidis:
About this time-horizontal view for "not available times"
1) I think that at least an HTML report with ALL the "not available times" constraints would be highly useful.
For the rooms each cell is going to include ALL the weights of each one of the constraints.
2) Moreover, instead of implementing (coding) a completely interactive dialog it might be easier if you could implement a time-horizontal view,
and instead of modifying the "not available times" constraints in this dialog,
the user could just press (for example) on the teacher, OR the students set, OR the room in order to open the already existing day-horizontal dialog
for the respective constraint (for example, of the selected teacher)
At least this HTML report is very important. Imagine for example that a typical Greek secondary school (in a city) has around 50 teachers.
Music schools have much more teachers.
Imagine for example a music school with 300 students and each student is a "group" by himself regarding the musical instruments lessons.
508---------------------------------------------------------
From balacco (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5614.0
Teachers/students all gaps on the same day must be consecutive.
Liviu Lalescu:
I think it was already suggested in the past by other users and I think a solution is impossible or too complicated.
509---------------------------------------------------------
From Bachir Sayah (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5615.0
I hope in the next update we will be able to make changes in the number of divisions for an activity .. to make more or less divisions after
adding an activity.
510---------------------------------------------------------
From Alexandre R. Soares:
Maybe some sentences should have gender inflection, p eg., "...for teacher %1 but not also min hours daily for him/her...".
I've considered it in the Portuguese version.
511---------------------------------------------------------
From ayreon (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5640.0
Maybe I did not get how the constraint StudentsMaxBuildingChangesPerWeek works.
I have a dataset with two buildings with different room. I want that if a group of students goes in a building then it remains in that building for that day and also for all week.
If I set StudentsMaxBuildingChangesPerDay = 0 I get that a group of students remain in that building for all the day. But if I set StudentsMaxBuildingChangesPerWeek = 0 the building changes between days.
What am I doing wrong?
Also, is it correct to assume that if StudentsMaxBuildingChangesPerWeek = 0 I can skip StudentsMaxBuildingChangesPerDay?
Liviu Lalescu: Unfortunately, it is a feature, not a bug. However, I added this in the TODO.
512----PARTIALLY DONE IN FET-6.11.0 on 23 October 2023------
From fartoto_dz2004 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5668.0
Can you add multiple selection on constraints lists when deleting (mean deleting multiple constaints)?
513---------------------------------------------------------
From sebi1972 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5707.0
Romanian:
Foarte buna constrangerea
"Un set de studenti incepe devreme (max inceperi la ora a doua)"
Dar am nevoie si de constrangerea
"Un profesor incepe devreme (max inceperi la ora a doua)"
se poate implementa? Sau o pot substitui cumva altfel?
Am incercat cu etichete, am etichetat toate activitatile unui profesor dar nu stiu ce constrangere sa pun ca activitatile etichetate sa fie puse cat mai devreme posibil.
Am nevoie ca profesorul respectiv sa aiba activitatile cat mai devreme posibil puse.
English:
Implement the constraint type "Teacher begins early max beginnings at second hour".
514-----------POSSIBLY DONE?--------------------------------
From Daniele Rocci:
I have a question that may involve future development: is it possible to set a constraint for all teachers except a small list?
In practice, in my case, out of 93 teachers, I can set the same constraint for the empty slots for 80 of them. It would be faster
to specify the 10 exceptions rather than adding a single constraint to all of them.
Liviu Lalescu: suggested also in many other TODO items.
515---------------------------------------------------------
From ggscuola (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5712.0
ggscuola:
1) All teachers/A teacher start(s) the day in a specific building. [end(s) the day in a specific building].
2) All students/A students set cannot have two specific subjects on the same day.
3) All teachers/A teacher work in a hourly interval min days per week (there is MAX option in current version).
Liviu Lalescu:
(2) can probably be solved with constraints of type min days between activities or students activity tag max hours daily.
(3) can probably be solved with constraints of type activities occupy min time slots from selection.
ggscuola:
Regarding point (2):
If I have multiple teachers teaching the same subject (with a lot of students sets and sub-activities) and I don't want students to have English and French,
Arts and Tech, Music and Sport activities on the same day, it would be hard to set up "min days between single activities".
And I don't see how "max hours daily" could work either, because some teachers teach the same subject 1 hour with a set of students and 2 hours with other sets.
Plus, some days last 6 hours, some days last 5, 7 or 8 hours... Some students go to school on Saturdays and others don't. So I cannot set hours between
activities for all the teachers and students sets.
That's why I was suggesting a possible new constraint which would avoid that two chosen "subjects" (or tags) fall on the same day.
Liviu Lalescu:
(2): If it is assumed that there are no two activities of English on the same day, and no two activities of French on the same day, you can add all the
activities of English and French, 100%, min 1 days between them.
If not, I just thought of another trick: use two constraints students min gaps between ordered pair of activity tags, min gaps = n_hours_per_day.
One from French to English and one from English to French.
516---------------------------------------------------------
From Nelson Gomes:
I'd like to make a few suggestions to implement in future versions of FET.
One of them is when you define that an activity must occupy max time slots from selection, you can't define a weight percentage under 100%.
In our case, and since your students have classes in the morning (6 periods of classes) and in the afternoon (only 2 periods), we'd like that,
as a principle, a specific subject wouldn't be in more than one afternoon - but if there are other constraints, that rule could be broken,
if it helps to achieve an timetable.
The other one (this one is easily solvable with other constraints, but if this could be implemented would save some time...) is that a activity
starts OR ends teacher (or students) day - as the current options, we can define an activity to be the one that starts or the one that ends the day,
but not starting or ending.
Liviu Lalescu:
- About activities occupy max slots from selection - I am not sure if
this can be made <100% even temporarily as a custom version, but I
think it is not a good idea, the timetable will be bad, the
constraint will be broken many times. But another good idea for your
exact problem is simple: say you have subject mathematics 1+1+1+1,
and a single 1 can be in the afternoon all the time and another
single 1 can be in the afternoon only if no other solution exists. In
this case, add 3 constraints subactivities preferred times: split
index 1, respectively 2, not allowed in the afternoon, 100% both, and
split index 3 not allowed in the afternoon with 90%.
- About starts or ends day: it is not possible elegantly (perfectly). I
did a customization for a user some time ago and if you are interested
I can direct you to this and maybe if you need it I can help with
adding again this custom code to the latest FET version as
a customization for you. But I think I might know why you want this:
you have either fortnightly activities or a difficult students'
structure and you need the timetables for all the students to be
without gaps. In this case, as I recommended a college in my country,
you can triple the weekly activities, adding them to another students
sets, then set same starting time for each set of three, and use
max 0 gaps for all the students. Hmm... I did a custom program for
that user to add this and it is quite a big task... Please see this
forum post: https://lalescu.ro/liviu/fet/forum/index.php?topic=5370.0
Nelson Gomes:
As I stated, the last request isn't a big deal for me - I circumvent the lack of that option defining that some activity has a set of preferred time slots,
allowing only the first or last slots of the day. We don't use this feature all that much, so isn't a big deal (only when a teacher is going to be
substituted by another colleague for a short time - few weeks, one month -, to assure that this activity doesn't act as a gap to the teacher that usually
doesn't have that set of students.
517---------------------------------------------------------
From Crizalid, Volker Dirr, and Liviu Lalescu (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5721.0
The idea would be that fet-cl (FET used from the command-line) could have a parameter maybe like that of the GNU/Linux make command, -j n_processes,
so that it will generate multiple timetables in parallel on n_processes threads, like in the FET GUI generate multiple option.
518---------------------------------------------------------
From Vangelis Karafillidis:
About import/export from/to CSV:
1) Add a corresponding buttons also in the dialogs (of students, teachers, subjects, activity tags, activities), because having it only in the File menu
might not be noticeable by the user.
2) Implement import/export of not available constraints from a text matrix (maybe with x and o for not available or available).
519---------------------------------------------------------
From Vangelis Karafillidis:
Improve the name of the constraint teachers/students work in an
hourly interval max days per week to teachers/students DO NOT work
in an hourly interval MIN days per week.
Liviu Lalescu: Sorry, but for now I prefer the current approach.
520------DONE IN FET-6.11.0 on 23 October 2023--------------
521---------------------------------------------------------
From fourat (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5746.0
I work with two weeks week A and week B with weekly activities and others fortnightly.
Is it possible to add to the constraint a teacher max span per day an exception with two days (for week A and week B)??
Liviu Lalescu:
Unfortunately, the constraint allowing one day exception was already very complicated to implement. With two days exceptions,
seems too complicated, at least for now.
522---------------------------------------------------------
From Volker Dirr:
Merge the "single" type and "all" type of constraints into a single dialog (instead of two).
523------DONE in FET-6.12.0 on 3 November 2023--------------
524---------------------------------------------------------
From ygoldblatt (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5749.0
Is there a way to control the order that the lessons appear on the printout of the timetable? It seems to be random and I would like to control it
525----------DONE in FET-6.13.0 on 14 November 2023---------
526---------------------------------------------------------
From Vũ Ngọc Thành (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5755.0
What should I do if i want max Activity tag = 1 from selection?
(in a table n_days x n_hours, he selected with X two slots.)
---
I have Two sets of activities:
Activity 1 with: id1,id2,id3,id4,id5
Activity 2 with: id6,id7,id8,id9,id10
I want to put only 1 activities in there
---
I have Two sets of activities:
sets of activities 1 with: id=1,id=2,id=3,id=4,id=5
sets of activities 2 with: id=6,id=7,id=8,id=9,id=10
I want to choose 1 set of activities for 2 lecture periods as shown in the picture.
---
Liviu Lalescu: So in the two slots selected with X there can be at most one activity tag?
---
Vũ Ngọc Thành: Thank you for understanding my thoughts correctly. I find this constraint does a lot of good for scheduling.
527------------------DONE in FET-6.15.0---------------------
528---------------------------------------------------------
From rozojc (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5760.0
Constraint room max occupied time slots per week.
529---------------------------------------------------------
From pnlshd (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5763.0
Teacher has at most one activity per week in a certain room/set of rooms?
---
How can I do this?
For example, I have three activities for each teacher. I want at most one of them (anyone) to be placed in a certain set of rooms.
This is to ensure fairness in the room distribution among teachers.
I can put a tag that only gets placed in these rooms but I don't want to choose the activity to be placed or be forced to count them myself.
530--------------DONE-in FET-7.0.4-22 February 2025---------
531---------------------------------------------------------
From Vangelis Karafillidis:
What I would like FET to have is a warning when re-generating single timetables. I think that for multiple timetables FET asks if the user
wants the solved timetables to be overwritten. I think that this should happen with single timetables, and I would like in addition to the warning
the user to have the option to save the generated timetable(s) (let's say in a .zip file) as a backup, for example I generate a single timetable
the file name is MusicSchool.fet. When I work with this file (without changing the name) and regenerate, the previous results are lost, so
it would be useful if FET asked if I want the results to be lost and keep the same filename, or if I want to keep the results changing the filename,
or if I want to keep the filename and keep a backup (.zip) file of the respective fet-results subfolder.
Liviu Lalescu:
The user would be annoyed to get a warning each time. Also, maybe too much disk usage if it changes the name each time.
Vangelis Karafillidis:
You could add an option in the settings "allow detailed warnings (highly recommended for new users)".
532---------------------------------------------------------
From Volker Dirr:
about:
https://lalescu.ro/liviu/fet/forum/index.php?topic=5774.0
I sadly understand that it is a bit confusing. In fact it is a bit
strange in FET to have roomS constraint for a single room.
Just be "room constraint from a set of rooms" while rooms can be also
just a single room.
So merging the room and roomS constraint is my opinion useful, like
merging all "a teacher" and "teachers";
and also merging "a student" and "all students" is useful, as i
suggested already some time ago.
533---------------------------------------------------------
From Volker Dirr:
Do we also need to print a table with activities that haven't got a building?
And if yes: Do the teachers timetable need a table with activities
without teachers? Similar to students, rooms, activity tags?
534---------------------------------------------------------
From Vangelis Karafillidis:
I was thinking about this "parallel" processing of a single timetable.
I have a 8 cores /16 threads CPU. Let's say that the user starts solving 16 timetables.
FET... is able to write on the disk the "highest" timetable when generating.
(when the users wants to). Right?
Liviu Lalescu:
In a single generation only or if you interrupt the multiple generation.
Vangelis Karafillidis:
Let's say that instead of letting the user interrupting the generation you make FET
interrupt the generation and save the highest timetables. For example 16 timetables are generated
Let's say that we have 500 activities.
After 500xn (n might be 3,4,5... or more) attempts of placing activities,
on each one of the threads each thread has its own "highest" timetable,
which is recorded by FET. Then FET takes the 4 best highest timetables (it might be 2,3 timetables...)
Stops the generation for all threads and starts a new generation.
For example the 1 best is delivered to 4 threads (threads 1-4) which continue this generation.
535---------------------------------------------------------
From Darren McDonald:
It would be useful for me (and some of the other staff members at my school) to have a “Free Room” timetable,
which shows a list of free rooms for each period (much like the Teachers' Free Periods timetable).
This would be useful for finding rooms to accommodate courses that haven’t yet been assigned a room,
and also for planning events throughout the year (where we often need to find, for example, three nearby rooms
that are all free at the same time).
536---------------------------------------------------------
From ngoctp29121982:
https://lalescu.ro/liviu/fet/forum/index.php?topic=5790.0
I've been using version 6.11 guys Added option in dialog to add time/space constraints for teacher(s),
so you can now add individual constraints for each teacher only with one click
I think having the option in the dialog box to remove time/space constraints for the teacher(s),
so that you can now remove individual constraints for each teacher with just one click would be great. Great
Allows you to delete part or all of it with one click, thus making the teacher's time/space constraints more complete.
537---------------------------------------------------------
From Volker Dirr:
about:
https://lalescu.ro/liviu/fet/forum/index.php?topic=5813.0
Maybe FET needs an "save anonymous" feature.
So it replace for example teacher names just by "teacher 1", ...
By that guys might ask earlier for help in the forum without fearing to
publish too critical data. And it will also help us reading files if
they are written Arabic or with other non Latin characters.
538---------------------------------------------------------
From Volker Dirr and Liviu Lalescu:
Convert the very many nested if / else if-s in Rules::read, the part of reading the time / space constraints.
This could be done with a switch based on hashes / maps of the strings. Complicated and critical.
539---------------------------------------------------------
From maxi_mus (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5821.msg32156#msg32156
For morning afternoon mode, it seems to me that the names of the constraints are ambiguous. For example, 'a set of activities end students day'
is clear in original mode, but in MA mode, this means FET days (right?) and not actual days. Would it make sense to rename this stuff so
it's not ambiguous? This is perhaps something I could help you with.
540---------------------------------------------------------
From Gênesis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5080.msg32169#msg32169
Como fazer para imprimir um horário com as disciplinas repetidas dentro da tabela, ao invés de uma disciplina mesclada em 3 ou 02 celulas. Esticamente não fica legal.
Translation from Portuguese to English using Google translate:
How to print a timetable with the subjects repeated within the table, instead of a subject merged into 3 or 2 cells. Aesthetically it doesn't look good.
541---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5848.0
Is there any way to negate all tag related constraints ?
If activity has "xx" tag it is easy to set a constraint.
How about activity has no "xx" tag ?
Is there any way to accomplish this ?
Liviu:
Thank you for your suggestion! I will only add it in the TODO for now, and I'll think of it, but it is unfortunately probably very complicated, since it wasn't
considered from the start of the work.
542---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5849.0
It could be very nice feture to set preferred starting times with a hard constraint without student groups (e.g tick box for ignoring student groups for that activity or even that time slot chosen for the constraint.)
In a university schedule, some courses "can overlap" even having the same student groups ( by the nature of required, elective courses)
When we want to ignore this overlap, only way is to remove the students groups from one of the overlapping activities. Then these courses can be placed in the same time slot.
However, when we want to change one of these ativities later on to another time slot actually we loose the student group information already for this new time slot where student group information is needed again.
it is time consuming to update the activity with the original student groups and place it on another time slot.
I hope i explained it clearly.
---
Extented IDEA : :)
There could be also option to ignore :
Student Groups (even better to choose which ones to be ignored)
Activity Tags (even better to choose which ones to be ignored)
All Other Time specific constraints except this one
All Other Space specific constraints except this one
So basically, I am looking for a "killer" option to make preferred starting time is 100% applied.
And again, if I dont need this constraint, all my tags and student groups will be there and no worries on if I place activity somewhere else.
---
Liviu Lalescu: I added this in the TODO, but it is a fundamental feature of FET to not allow overlappings.
---
ogursoy:
Thanks for considering my suggestion. But please give it a higher priority :D
In a university schedule consider this scenario :
Course A with StudentGroup1, StudentGroup2, StudentGroup3
Course B with StudentGroup2
however, Student Group2 for Course B is actually optional because it is an elective course for this student group. they do not have to take this course.
Because they have other courses as well for elective group.
Preferably Course A and Course B should not overlap However, when you have hundres of courses you have other program elective courses that StudentGroup2 can take.
So overlapping with Course A and B must be ignored in certain cases when you have time & space limitation. - what a suprise ha ? :) -
It is already possible by removing StudentGroup2 from Course B. And you can place it in the same timeslot with CourseA without problem.
But when you need to move it to another slot later on for some reason and if this time it should not overlap at all, you have to update the activity CourseB
and set student group again in order to make it happen.
This is time consuming and easy to miss.
So, same logic for the activity tags as well. I will not repeat my example.
This could be called an "exception" for the activity constraint and has a "killer switch" on all other constraints set for the activity.
BTW: Please do not consider this is a real overlapping. Basically this could be achieved creating multiple schedules with correct set of constraints.
This is actually allowing to create multiple schedules in the same schedule. So it is not violation of FET fundemantal principle.
This is a feature allowing user to create multiple schedule in a one single time table :) ;D
---
Liviu Lalescu: Maybe you could add two tags, A and B, and a constraint activity tags not overlapping, A and B, probably 100%, which can be
activated/deactivated with a single click. Otherwise, it seems very complicated.
---
ogursoy:
yes it is possible with 5-10 courses. Suppose you have this scenario :
Student Groups :
Study Programs x Semesters ( 8 ) x Sections .
Study programs have curricula which defines the courses to be taken in which semester and courses that are electives which can be taken in any semester.
Some courses could be elective for some student groups and at the same time required for other student groups.
combination of these student groups (as activity tags) for not overlapping is unmanagable.
We have around 400 activities , 3942 subgroups around ~120 teachers.
Another workaround could be to activity level state management. Where we can revert back all changes done to an activity. (so it will revert back activity tags,
student groups and teacher.) So we can remove freely student groups, tags and put it manually where ever we want. If we need to change it again, we could revert
back the original student groups and tags. so this will also helpfull alot.
---
Liviu Lalescu:
Hmm... sorry, it is difficult for me to follow your suggestion. I will add your words and read again later.
Do you know that in recent FET there is a History (Undo/Redo) option?
---
ogursoy:
Yes of course, it is perfect. But it reverts back to all states. that is, i can not selectively chose states:
In this set up , when i choose a state, it is perfect for that activity. But I loose other states of other activities if I have changed one of them.
so, state selection overrides all changes in other activities. All activities are revert back to state where a specific state is chosen. It is a time machine,
and reverts back all changes to that point.
I hope it is clear ?
---
ogursoy:
State 1 : Activity X changed
State 2 : Activity y Changed
State 3 : Activity z changed.
when you go state 1, you loose all changes done to activity y, activity z.
"It is a time machine " : )
543---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5850.0
FET files are generated in Multiple Time Tables.
It could be also very nice to have also csv version of the each time table. Same as when we export FET file.
544---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5852.0
When we set a space sontraint, it could be very nice to give priority to buildings. So any set of preferred rooms (from building 1, building 2,..)
give one of the building a higher preference so FET places activity in the room with higher preferred building.
I am aware that it can be still done with correct space constraints (multiple!) but a lot of work to set up these constraints.
545---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5853.0
It could be very nice feture to be able to use multiple activity tags in an activity tag related constraint.
furthermore, even better if we could also specify :
If all tags must match (AND) or any of the selected tags match (OR).
546----------------DONE-------------------------------------
547---------------------------------------------------------
From topposempre (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5856.0
Vorrei sapere se è possibile stabilire un numero massimo di ore settimanali per ciascun docente, in modo tale che, se per errore, nella creazione delle attività
dovessi assegnare più ore, il sistema me lo segnalerebbe.
English translation by Google Translate:
I would like to know if it is possible to establish a maximum number of hours per week for each teacher, so that, if by mistake, when creating activities, I were
to assign more hours, the system would notify me.
548---------------------------------------------------------
From GUEFFAZ REDA:
add : pause button generation
549---------------------------------------------------------
From Cyrus Ireri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5860.msg32368#msg32368
It would be great if it was a constraint all teachers work in an hourly interval MIN day per week.
550---------------------------------------------------------
From Volker Dirr:
While playing with the Microsoft compiler I noticed a critical bug:
If you compile (at least in release mode, i didn't tried debug mode),
then assert() is not executed.
That might be very critical.
For example if you have a function like this:
bool checkFunction(int a){
if(a)<5 return false;
return true;
}
And then you call the function like this:
assert(checkFunction(B));
In that case with is working fine with gcc, but MSV will skip it.
Even more bad is it, if you need the results from assert later, since it
do/modify something.
---
Liviu Lalescu:
I never do/modify anything in assert, because it is a bad practice.
Also, in this case I think you get a compiler warning.
We need always to be prepared that assert is not executed.
---
Volker Dirr:
Sadly i don't get a compiler error if i use it later.
You get only an error if the variable is only used in the assert.
Is it more safe to write on own assert function that will be
always executed?
---
Liviu Lalescu:
I use "#undef NDEBUG" before "#include <cassert>", so this should make
sure assert is checked. I am afraid now to make our own assert in FET.
Maybe I'll add your suggestion in the TODO?
---
Volker Dirr:
yes. only as a TODO. I fear an own assert in generate make slow down too
much.
Maybe add in the TODO and maybe also add this link, since that might be
very useful in that function:
https://en.cppreference.com/w/cpp/utility/source_location
551---------------------------------------------------------
From Cyrus Ireri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5844.msg32398#msg32398
In Liviu Lalescu's words:
For activities 1+1+1+1+1, he would like 3 subactivities (3 hours) to be placed in the morning. This is easy with the constraint subactivities preferred time slots.
But for activities 1+1+2, he would like 2 hours to be placed in the morning, either 1+1 or 2. This can be only done with the constraint activities occupy
min time slots from selection. He suggests a more user friendly way to implement so many constraints (he has 4 years with 20 groups each with 3 such subjects each,
so 240 constraints (!) ).
Liviu Lalescu:
If you have 1+1+1+1+1 and use 3 constraints subactivities preferred time slots, it is much better than using activities occupy min time slots from selection,
in terms of generation speed.
However, for the above case (1+1+2 and you want two hours in the morning), even if we developed a new constraint, I think it would be the same as speed of generation
as activities occupy min time slots from selection.
So, the only advantage of adding a new constraint would be user friendliness.
552---------------------------------------------------------
From ogursoy (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5870.0
I am looking for correct implementation for centralized exam schedule where some activities share big a hall.
I know that i can create representative rooms for this big room but how to also satisfy that these "dummy" rooms created for the big room will not exceed
the total capacity of the real room ?
553---------------------------------------------------------
From aldo.f (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5873.0
I would like to be able to open a fet file and be able to view the last timetable generated in the Timetable tab and perhaps also see the conflicts.
For now you need to open the "....data_and_timetable.fet" file and regenerate the timetable.
554---------------------------------------------------------
From Alex Chernous (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5875.0
From version 6.12.0 (adding history), when the program is run, a directory is created (auto-saving, working, importing) but in wrong encoding (see attachment).
When you set the location of files in the settings again, this does not happen.
I tried to change the directory name in the settings file, but it didn't work, the encoding changed again and the directories were created.
---
Liviu Lalescu:
I found a possible fix, but I don't like it. I attach the file (fet.cpp). You can see the fixes if you search the text setIniCodec (it appears in 2 places:
line 390 and 598, adding stuff like 'newSettings.setIniCodec("UTF-8")'). Unfortunately, in line 598, when writing the settings, I don't know why I need not
to apply the fix (I commented this line in the file attached below). Note that this fix is only for Qt 5 (easy to correct for Qt 6 with an #if).
With the fix in line 390, it works, but after saving the settings the file still looks ugly, they still have the \x... stuff.
I don't like this fix, because it is not symmetrical and the saved configuration file is not looking correctly.
The bug only appears if you use an INI-style file for the settings (macOS or GNU/Linux, not Windows), and use FET with Qt 5 after using FET with Qt 6 (not viceversa).
---
Alex Chernous:
Can do the same with configuration files as with a history file. If the version is out of date or format change, create a new file?
---
Liviu Lalescu:
It is unnecessary in my opinion. It is comparable with loading a fet file with newer FET and saving it - the old FET might not always open it correctly.
The main options are there, only some characters are maybe wrong, but easily correctable.
555---------------------------------------------------------
From Volker Dirr (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5875.msg32462#msg32462
How about adding an executable that does nothing else than clearing the settings (of course it should ask first).
It might help in rare cases or if someone wants to uninstall.
---
How to call that executable "uninstall".
Then it just tells you that you need to delete the working directory, the fet directory (but it shouldn't delete it. The human should do it, also because it can't
remove itself) and it should ask if the settings should be cleared.
556---------------------------------------------------------
From Volker Dirr:
I think i will make the style changeable in TiTiTo from the interface.
It is easy.
If you want to do it in FET also, you can code it like this:
QStringList stylesStringList=QStyleFactory::keys();
//QString currentStyle=QApplication::styleSheet();
bool ok;
int styleID;//=stylesStringList.contains(currentStyle);
QString selectedStyle=QInputDialog::getItem(this, QObject::tr("Change
Style"), QObject::tr("Change Style:"), stylesStringList, styleID, false,
&ok);
if(ok && styleID>-1){
QApplication::setStyle(QStyleFactory::create(selectedStyle));
}
---
In TiTiTo it will be easy: I will just save the string in the
settings and load it. then it is easy to get the index.
And if you start it the first time, the string is simply empty. So Qt
will choose index 0.
557---------------------------------------------------------
From danghoan (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5888.0
How to export teachers' busy times to Excel (or CSV)?
558---------------------------------------------------------
From Vangelis Karafillidis:
Constraints two sets of activities are overlapping on min/max time slots from selection.
Suggested again on the forum, by choko and Vangelis Karafillidis:
https://lalescu.ro/liviu/fet/forum/index.php?topic=6021.0
choko:
Other than "a set of activities that are not overlapping with any other", is it possible to develop a new set of constraints that an activity must be overlapping
with at least one activity from a set of activities"?
Vangelis Karafillidis:
Liviu, I think we have already discussed this issue. Sometimes, constraints of the type "a set of activities share min common time slots with any of another set
of activities" (and maybe in selected time slots). As you told me, this type of constraint is extremely difficult to be implemented. But it seems this type of
constraint is quite useful...
Again from Vangelis Karafillidis, on the forum:
https://lalescu.ro/liviu/fet/forum/index.php?topic=6255.msg34719#msg34719
The crucial point is that the necessity for this type of constraint "a set of activities shares min common time slots with another set of activities"
(and maybe in selected time slots) seems to appear more other than I expected...
559---------------------------------------------------------
From Cyrus Ireri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5904.0
Is it possible to have timetable one prints in a standard size eg. A4 size so that whether the activities are many or few, they will fit in it?
I have had scenario of some teachers' timetables occupying 1/2 page of A4 paper while others being more than a page hence customizing the ratio.
I tend to think if that can happen, one wouldn't have to photocopy timetable so as to fit whole page of A4.
Teachers tell me they struggle to see their timetables if they occupy half page of A4.
560---------------------------------------------------------
From Cyrus Ireri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5908.0
I have a scenario where when we have tution sessions for like 7 days, you get a situation where some teachers are through with their sessions 2 days
before while others have till the last day. Is there a way of ensuring that out of the 7 days, a teacher will have at least one of the last days to
avoid conflicts on why me and not the other teachers. If we can have a constraint like "all teachers work in days interval min/max days per week"
it can be of great help. Is it doable?
Liviu Lalescu: Cyrus Ireri has a file with 7 days per week. He needs that a teacher works in exactly 1 day out of the last 2 days of the week.
561---------------------------------------------------------
From GUEFFAZ REDA:
A setting to check for snapshots on startup (similar to checking for updates/new official versions on startup).
562---------------------------------------------------------
From pnlshd (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5930.0
Any idea how can I properly add days to the week in the basic data without affecting existing constraints?
I have a case where I am building an exam timetable and I want ALL students to have min 7 resting hours which is the number of lessons per day
(basically saying all students should not have two exams in consecutive days but in an easier way than manually doing min days between activities)
but the problem is that exams take two weeks and I have not added the off days in the beginning and now this constraint considers the end and
start of the week as having no rest. I wanted to add this day and make it not available for all students but I don't want the current
Teacher not available constraints to get affected (aka shifted when I add it).
---
I managed to do this by manually adding the day and modifying the number of days in the source .FET file. If you have any general feedback about
the problem itself you are most welcome :)
563---------------------------------------------------------
From TAHIR (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5931.0
Is it possible teacher statistics appear at the end of each teacher Timetable?
564---------------------------------------------------------
From Vangelis Karafillidis:
For importing activities from a .csv file, this feature, for adding the attribute active/inactive.
Volker Dirr:
So a new field is needed. If it is empty, then it will be the same as the old (to keep old
behaviour). And in the new field must be a string with true/false flag for each subactivity.
Maybe also split by "+", so it looks similar to split duration?
565---------------------------------------------------------
From maxi_mus (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5927.0
Cannot optimize, because you have constraint teacher min hours per morning for teacher XX but not also min hours daily for him. Please add a constraint
teacher(s) min hours daily affecting this teacher
I don't understand the problem here. The problem persists, even if I add a constraint 'minimum hours per real day'.
If I add a constraint 'minimum hours per day', then this obviously also forces FET to make a minimum number of hours for each afternoon. I don't want this,
this is the exact reason why I chose the 'minimum hours per morning' in the first place.
566---------------------------------------------------------
From Cyrus Ireri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5938.0
Is there a way of ensuring teachers can't have 2 sessions with 2 duration consecutive even if there is a break between? This affects science teachers when
they have double lessons for practical. The method I have been using is exhaustive more so when dealing with a school with 48 classes.
I don't mind a double and 2 single sessions but not double and double.
Liviu Lalescu:
Maybe min 2 gaps between activities?
Cyrus Ireri:
That's what I have been using. Wish we can have constraint like max hours with an activity tag between time intervals for all teachers. It can save the hustles.
Liviu Lalescu:
I think Cyrus Ireri refers to teachers max hours daily with an activity tag in an hourly interval.
567---------------------------------------------------------
From TAHIR (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5960.0
Can we modify duration of all activities in single click?
Volker Dirr:
hmm.. I think if such a feature will be added, then it should contain a filter like in modifying multiple min days between activities constraints. So like
modify only activities with hour x or with subject x or only sub-activity x.
Liviu Lalescu:
Or maybe better modify a selection of activities in the activities/subactivities dialogs?
568---------------------------------------------------------
From TAHIR (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5961.0
A timetable have two frameworks. In one framework duration of lecture is 45 min and other framework duration of lecture is 40 min with break time 20 min.
How can we adjust this timetable except 5 min fet hour trick?
---
In 5 min fet hour Length of timetable become too long. Then to print all fet hours in single page font size reduced too much.
Volker Dirr:
We might hide the hour names at all.
or we might print the hour names only if the start and end time is used.
So in worst case all times. In best case around 4*hours per day.
It is a bit complicated to print only the needed start and end times, but
I think it is possible to code it. Sadly not very easy and it must be coded for a lot of timetables. So sadly a longer coding task.
569---------------------------------------------------------
From TAHIR (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5962.0
Can we import or export fet hours by using .csv file?
Volker Dirr:
That feature is not implemented by csv, because in normal case there are not many hours and you need to add them only a single time in your whole life.
hmm...
might be max useful if there is a school with a lot of hours because of a small duration like 5 minutes.
i think we can add this into the TODO also for days.
TAHIR:
Actually i am trying to generate different timetables of different types. Now in current timetable 5 min fet hours are 69.
08:00-08:05
08:05-08:10
So on .....
570--------------------DONE-in FET-6.21.0-------------------
571---------------------------------------------------------
From Ariel Thomás Rosero Peñaherrera (in his thesis "DESARROLLO DE UNA APLICACIÓN WEB DE PLANIFICACIÓN ACADÉMICA PARA LA FACULTAD DE INGENIERÍA DE SISTEMAS"):
- Write the rooms' XML timetables after generating the timetable, similar to the existing activities', teachers', and students' XML timetables.
- Allow multiple users to work on the same data file.
572---------------------------------------------------------
From Volker Dirr:
In the Mornings-Afternoons mode, output the real days/hours teachers free periods and teachers/students statistics.
573---------------------------------------------------------
From victorcapel (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5561.msg33053#msg33053
Is it possible to add new constraint for max gaps between an ordered pair of activity tags for a teacher?
Liviu Lalescu: "min" is already implemented, but this "max" is much more complicated. Do you mean in the Mornings-Afternoons mode, for a day, for a real day,
and between morning and afternoon, like the "min"?
victorcapel:
I just need for a day the constraint max gaps between an ordered pair of activity tags for a teacher.
Liviu Lalescu:
So for the Mornings-Afternoons mode, for a FET (half) day?
Also, can on a single day be a single tag present, or there must be both tags present?
victorcapel:
Could have both or just one, if have both tags it needs to have a max in a half day.
574---------------------------------------------------------
From youcef39 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5966.0
The suggestion or question concerns restrictions on changing buildings
I believe that the current restriction enables us to specify the number of times buildings can be changed within a certain period of time. This is an excellent, wonderful, and useful approach for many schools, especially those that include two buildings.
But there are schools with 5 buildings, so be it
Building A
Building B
Building C
Building D
Building E
Since it is acceptable and we do not need a condition not to move between Building A and Building B, for example, movement is also permitted between Building D and Building E.
The same thing is also acceptable and we do not need a condition not to move between Building C and Building D
But we need a restriction that prevents or reduces movement between Building A and Building E if prevention is impossible
We need a restriction that prevents or reduces movement between Building B and Building E if prevention is impossible
I mean, we want to develop a restriction
The maximum number of structures in a time domain that currently exist can be changed within the constraint
We can specify the time range...currently available
We can specify the maximum number of building changes....currently present
We can choose the intended buildings.... currently not available
575---------------------------------------------------------
From Volker Dirr (on forum):
About FET in MA Mode:
What do you think about adding a warning already in the days per week
dialog if the number of days is odd?
So maybe add a red label there that the number of days must be even
and/or print a warning if you close the dialog.
---
Liviu Lalescu:
I think I thought of this, but:
1) He might open an old file, before FET-6.21.1.
2) He might convert the mode from Official to MA and back.
3) The label is visible (even if disabled) in the Official mode, and
the users might get a wrong impression that they need even days.
4) He must anyway read the instructions to double the FET (half) days.
---
Volker Dirr:
hmm... I can't see why 1) to 4) should be a problem.
yes 1) won't help old users, but it will help all new users. I think
this is minor.
about 2): hmm... So maybe a warning function that is use 3 times. So you
need to code it only once (loading, changing mode and changing days)
about 3) You can hide the warning if not MA mode.
about 4) seeing this warning early is maybe very good, since you can
write "... see the instructions".
At the moment you (maybe) warn about that too late.
Isn't it more user friendly to warn earlier about it.
576---------------------------------------------------------
From TongThanhKieu (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5973.0
I would like an additional constraint: Each morning/afternoon has a maximum of x subjects.
For example: One morning there are only a maximum of 3 subjects: 2*Math, Computer Science, 2*English.
Liviu Lalescu:
Thank you for the suggestion! It is possible to do, I think. But I am a bit reluctant about it, how is this useful?
TongThanhKieu:
There are 3 reasons as follows:
1. Students do not feel happy when studying too many subjects.
2. Teachers do not want to move too much between classrooms.
3. In specialized schools, teachers and students want to spend more time studying a subject in depth.
Liviu Lalescu:
Is it a general constraint, for all the teachers and students sets? Or you want to add it separately, for a teacher/all the teachers/a students set/all students?
TongThanhKieu:
Add this constraint to a student set, a teacher, all teachers or all students.
Liviu Lalescu:
I added this in the TODO.
But there are also other modalities to impose this requirement with the existing FET constraints:
- Teacher(s) max room changes per day.
- Increase the duration of some activities to 2 hours and impose a min 1 day between the same subject, with 100% (or teacher(s)/students (set) activity tag
max 2 hours daily).
- Min 2 hours daily with an activity tag for students/teachers, and allow empty days. Not all subactivities of a larger split activity should have this tag
(you can edit the subactivities for this).
TongThanhKieu:
Yes, i already know what you have listed and used it. Thank You!
Just more a good option for new user.
Liviu Lalescu:
You are welcome!
Unfortunately, this constraint might be very strong and timetables impossible, and the user might not know the reason.
577---------------------------------------------------------
From Andrea Maleci:
With Liviu Lalescu's words: Andrea had a file containing many locking time and space constraints. He saw them, but thought that not permanently locked
meant that FET will neglect them when generating a new timetable. His file was unsolvable, until I unlocked all the activities in time and space, after
which his file was solvable fast. So, Volker made the following suggestion:
Volker Dirr:
maybe if we start generating we can print a small "warning". if more
than 10% of the activities are locked in time or room, then print it on
the screen and write that it might a bit much to lock so many
activities. And if 100% are locked then writing something like "probably
an old generated file. trying to place the activities again. Be careful
if you modify manually this dataset, because it might happen very easy
that the data set will become impossible by that."
Andrea Maleci:
I think that the simplest way to fix this OSX issue is to document it, because you can't choose any options from the menu, but it's not so immediate
to understand that it's a workaround for a modal window in Windows.
578---------------------------------------------------------
From Andrea Primiani:
He asked me (Liviu) if he could translate "Add constraints" (in the teacher(s) add constraint dialogs) as "Aggiungi per tutti" or "Aggiungi a ciascuno".
So I thought that maybe even the English original might be "Add for all" or "Add for each/everyone". Consider that this push button is available
in the teacher add constraint dialog, so "Add for all" is appropriate, but also in the teachers add constraint dialog, so "Add for each/everyone" might
be better.
579---------------------------------------------------------
From paolo_d and Vangelis Karafillidis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5978.msg33171#msg33171
paolo_d has an impossible file, which is logically impossible, but FET does not warn this.
Vangelis:
The problem seems to be the teacher Romeo. His activities have duration = 2. Is it possible to change it? Otherwise, I think he should have max hours 6
at least for one day... since he has 22 hours per week.
Note by Liviu:
paolo_d has 5 days per week and 6 hours per day, and a constraint teachers max 5 hours daily 100%. So if the teacher Romeo has only activities with duration 2,
it means that he is allowed only 4 hours per day. 5 x 4 = 20, which is less than 22.
So, Vangelis suggested an additional test before starting the generation. But I (Liviu) consider that there are too many similar situations to take care
of them all.
580---------------------------------------------------------
From Diego Froner (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5983.0
A very common complaint about students' set schedules is the start time in the last hours on Fridays. So, considering this, is it possible to implement
a constraint to prevent a student set (or all students' set) from beginning at a specific set of time slots?
...
A suitable name for this constraint could be 'A students set has a preferred set of starting times.'
581---------------------------------------------------------
From Nelson Gomes (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5987.0
Is it possible to make mornings/afternoons mode with a different number of periods in each one? In my school (and I believe in many schools in Portugal)
the number of hours in the mornings is greater than the ones in the afternoons (in our institution, 6 in the morning and 2 to 4 in the afternoons,
depending of the school year). Of course the program works as is, but when trying to print the timetables, they become nearly unreadables, as they
end up using more than one page...
Liviu Lalescu:
Maybe we could add a Boolean value to each day/real day/hour/real hour, Hide_If_Empty; if it is true and the line/column contains no activities,
it will be hidden.
Volker Dirr:
See also item #568.
582---------------------------------------------------------
2024-10-16: The right-to-left part is DONE.
From AHMED LAOUAR (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5992.0
In Arabic:
إذا ممكن في الطباعة إضافة خيار لتكون الطباعة من اليمين لليسار في النسخة الأخيرة مع اتاحة امكانية كتابة معلومات تحت اسم المنشأة و فوقها كعنوان الجدول و اسم البلد
In English by Google Translate:
If it is possible in printing, add an option to print from right to left in the final version, with the possibility of writing information under and
above the establishment name, such as the table title and the name of the country.
Liviu Lalescu:
Printing from the FET interface is wrong in right-to-left languages because of a Qt bug, we cannot correct this ourselves.
About the additional information to write, it is only possible after the institution name and teacher/students set name, if you add the teacher's/students
set's comment in FET and choose to print comments for the teachers/students sets from the Settings -> Timetables -> Data to print in timetables.
583---------------------------------------------------------
From Henrique Belo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5993.0
Suggestion: Implementing Teacher Group Parameterization in FET Timetable
I would like to suggest a new feature for FET Timetable that I believe would bring great benefits to everyone's organization and time management.
Currently, we have the ability to parameterize students by year and class for example
5th Grade
5A
5B
5C
6th Grade
6A
6B
6C
...
My suggestion is to implement a similar feature for teachers.
The idea would be to allow the creation of groups and subgroups of teachers. For example:
English Teachers Group
English 1
English 2
English 3
Philosophy Teachers Group
Philosophy 1
Philosophy 2
Mathematics Teachers Group
Mathematics 1
Mathematics 2
Mathematics 3
This parameterization would make it easier to organize meetings that involve many teachers.
Instead of selecting each teacher individually for the activities, we could simply select the desired group, ensuring that all teachers in that group
are considered for the activities.
I hope this suggestion is considered and that it can be useful for many FET Timetable users.
Liviu Lalescu:
Yes, like Volker said, more users suggested a similar feature, for instance to add a set of teachers to a constraint.
584---------------------------------------------------------
From YOUSSEF HOUIET (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5994.0
Time horizontal view of Rooms not available times constraints in FET-NSRT
it is possible to add Time horizontal view of Rooms not available times constraints in FET-NSRT, for allow users to specify times when the room is
unavailable during exams, Instead of entering it room by room
Liviu Lalescu:
Unfortunately, a file can have more constraints of this type for a certain room, and also the weights are allowed to be less than 100%.
585---------------------------------------------------------
From Darren McDonald (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=5996.0
CSV Import/Export of Code and Long name
Currently my school uses the Comments field to enter student codes (students are Subgroups in our setup). With the new fields, it would make sense
to instead use the new Code field for this data. Would it be possible to have these new fields included in csv file import/export?
586---------------------------------------------------------
From Alessio (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6000.0
In Italian:
Come fissare un tetto max in ore per l'utilizzo di aule preferenziali
Ho il seguente problema: utilizzo 3 aule preferenziali per svolgere attività di laboratorio. In questo modo l'orario dovrebbe chiudersi più
facilmente perché non assegno una specifica attività a uno specifico laboratorio dando all'orario la possibilità di svolgere fino a 3 attività
contemporaneamente in laboratori diversi. Il problema è che così facendo non posso controllare quante ore saranno svolte in un laboratorio
e quante in un altro. Il punto è che ciascun laboratorio è affidato a un tecnico che da contratto non può superare un certo numero di ore settimanali
dovendosi occupare anche della manutenzione.
A questo punto mi chiedo è possibile porre un limite max in ore settimanali di utilizzo di un'aula laboratorio?
English translation by Google translate:
How to set a maximum ceiling in hours for the use of preferential classrooms
I have the following problem: I use 3 preferential classrooms to carry out laboratory activities. In this way the timetable should close more easily
because I do not assign a specific activity to a specific laboratory giving the timetable the possibility of carrying out up to 3 activities
simultaneously in different laboratories. The problem is that by doing this I cannot control how many hours will be spent in one laboratory
and how many in another. The point is that each laboratory is entrusted to a technician who, by contract, cannot exceed a certain number of hours
per week, also having to take care of maintenance.
At this point I ask myself, is it possible to set a maximum limit on the number of hours per week of use of a laboratory room?
587---------------------------------------------------------
From GUEFFAZ REDA:
Add the option to add a shortcut to the desktop.
588---------------------------------------------------------
From GUEFFAZ REDA:
The user can select more activities in the activities dialog and press a button there, "Duplicate", to duplicate the selected activities to another teacher
or to another students set. This is to avoid repetition and error insertion.
589---------------------------------------------------------
From Alpha Peace (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6004.0
If only Fet enables us to split activities after clicking on modify option, it would be great since we are deleting all the in order to split them.
Enable separately option for teachers too.
Liviu Lalescu:
I think Alpha Peace refers to making a check box "Separately" for teachers, in the same way as for the students, when adding an activity.
Alpha Peace:
That's exactly what I mean for activities split especially when using modify option.
---
Also Ai suggests in this forum topic to modify the split of the activities, but says that the "Separately" check box for the teachers might be impossible to realize.
590---------------------------------------------------------
From AmerAsiri (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6011.0
All teachers work in an hourly interval min days per week.
Further suggestions of AmerAsiri on this topic:
تكملة لما بدأته
لاحظت قيود بالقيمة (MAX) تحتاج إلى قيود مقابلة بالقيمة (MIN)،
مثل:
1- أقصى فجوات يومية للمعلم لا يوجد مقابله (أدنى فجوات يومية للمعلم).
2- أقصى امتداد في اليوم لا يوجد مقابله أدنى امتداد في اليوم.
3- أقصى تكرار لمجال من الحصص في الأسبوع لا يوجد مقابله أدنى تكرار لمجال من الحصص في الأسبوع.
لأن تحديد القيمة القصوى لا يضمن الالتزام بحد أدنى من التوزيع على أفراد المجموعة.
Translation with Google Translate:
As a continuation of what I started,
I noticed restrictions with a value (MAX) that require corresponding restrictions with a value (MIN),
such as:
1- The maximum daily gaps for the teacher have no equivalent (minimum daily gaps for the teacher).
2- The maximum extension per day, with no corresponding minimum extension per day.
3- The maximum frequency of a range of classes per week. There is no corresponding minimum frequency of a range of classes per week.
Because setting the maximum value does not guarantee commitment to a minimum distribution among group members.
Clarification by AmerAsiri, at the request of Liviu Lalescu:
1- MIN gaps per day for a teacher
2- Teacher (MIN) span per day
3- all teacher work in an hourly interval [[min]] days per week
591---------------------------------------------------------
From Vangelis Karafillidis:
I was thinking of "standarizing" a spreadsheet prototype for importing activities so, instead of importing from CSV
the user could download this spreadsheet and work on it.
for example an .ods file for Libre Office Calc
so, some kind of standarized syntax should be discussed
for schools such as Music Schools (with many private-like lessons) adding activities manually is a titanic task
I tried to "standardize" a prototype by myself around a year ago.
actually, what I did is to work on a spreadsheet, export the data into a csv file, and then import the csv file.
the major issues I encountered had to do with
1) activities with multiple teachers/students sets,
2) activities with multiple activity tags,
3) min days constraints.
592---------------------------------------------------------
From math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6016.0
Getting information about schedule generation interna (Liviu: the rest of the title was truncated?)
When generating a new schedule, FET tries to add all activities to the schedule such that all constraints are fulfilled. When adding an activity
results in a violation of contraints, a different placement of activities gets evaluated until (hopefully) finally a valid solution is found.
Is it possible to enable some kind of logging of this placement process? Is it perhaps possible to get an information which constraint has been
violated during the scheduling process?
Liviu Lalescu:
When you hit Generate, FET sorts the activities, 1, ..., n, where 1 is the most difficult and n the easiest, according to some objective but not
perfect estimations.
FET places 1, 2, ..., i. There might be constraints broken, but FET will swap the activities recursively to make place for say 4th. But if it cannot
place directly or by level>=1 swap to place i+1, FET chooses a slot and displaces all activities of that slot and places i+1. This is a level 0 swap.
It is possible to show, for each time slots of the week, the first constraint which makes i+1 impossible to place at level 0.
Am I clear to this point?
So, it is possible to show at each step say 5*6 slots (5 days per week, 6 hours per day) and activity id and the first broken constraint.
Some work is needed to add in each constraint type this logging. Not too difficult work. Hmm... I was just going to say "not too useful", but might
be useful to log this information when FET reaches a new highest stage.
593---------------------------------------------------------
From Vangelis Karafillidis, as a solution to a potential problem reported by Vũ Ngọc Thành (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6018.msg33453#msg33453
Vũ Ngọc Thành reported that the constraints of type teacher(s)/students (set) max room (and building) changes per week consider the changes as being
the sum of changes on each day, as opposed to maintaining a constant overall room (building) for the whole week if the maximum allowed changes are zero.
This was fixed by adding an explanatory text in the corresponding dialogs.
Vangelis Karafillidis further suggested this:
I think it depends how one interprets the constraint "max room changes per week". The constraint itself might mean either "max DAILY room changes
per week" or "max WEEKLY room changes per week". It seems that most people tend to interpret the constraint as "max WEEKLY room changes per week".
594---------------------------------------------------------
From AnSam and Volker Dirr (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6019.0
Volker's email to Liviu Lalescu:
she added one activity with duration 7, even she has only 6 hours per
day.
so maybe TODO:
- write a better warning in the generate pre and explain/complain a bit
more detailed
- limit the spin box in the add activities dialog to max hours per day.
(or don't limit, but write a warning if it is too high)
595---------------------------------------------------------
From Vangelis Karafillidis:
1) for the current implementation of importing from CSV file, we need some improvements.
2) for preparing the data (and maybe some constrains) on a spreadsheet, we need to "standardize" a "form" for this spreadsheet.
596---------------------------------------------------------
From Vangelis Karafillidis:
sometimes I wished there was a way to combine/merge .fet files.
for example the timetable of a Music School has a huge amount of data/constraints that need to be added to FET
most of the time there are two timetablers (or two groups of timetablers) which work nearly independently
in order to prepare the two parts (sub-timetables) of the timetable
these sub-timetables "intersect" on the hours that the students groups are available for these private-like instruments lessons
so
IF
there was a way to prepare (at first) two .fet files and then combine/merge them this would be very useful
OR
if you could add a option so the user could choose the first (initial) number of the activities
for example, the first activity to have id=3000 this might be possible to merge succesfully the one file with the first id=1
and the other file with the first id=3000 without conflicts.
597---------------------------------------------------------
From math (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6017.msg33458#msg33458
Time -> Tags -> Min days between activities with an activity tag
Time -> Tags -> Activities with an activity tag have same starting time
Time -> Tags -> Activities with an activity tag occupy min slots
Time -> Tags -> Activities with an activity tag occupy max slots
Time -> Tags -> Activities with activity tag A and activity tag B are ordered
Time -> Tags -> Max hourly span for Activities with an activity tag
Liviu Lalescu:
They might be too strong. Maybe they would be useful for students (set)/teacher(s).
598---------------------------------------------------------
From GUEFFAZ REDA:
Alert before production if hibernation mode is activated so that production does not stop.
Hibernation mode is typically three hours, and production is sometimes for long hours.
599---------------------------------------------------------
From Devrim Altınkurt (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6023.0
I would like to report an error regarding the time period when classrooms are not available.
I added the sample file.
1. First I created a new file.
2. I added an activity (act1, duration:6, no teacher, no students).
3. I added a class (room1).
4. I added the "An activity has a preferred room" rule. (act1 -> room1)
5. I added the "A room's not available time" rule. I turned off all hours and turned on only 5 hours.
6. When I click "Generate" button, the program goes into an infinite loop because there is no control.
Liviu Lalescu:
Do you mean FET should warn that it is impossible and not begin the generation? It is too complicated to take care of all situations, unfortunately.
Devrim Altınkurt:
You are doing this control for teachers and studentsets.
Liviu Lalescu:
Indeed, but each activity has an exact assigned teacher and students set (or none, or more), and also teacher/students set not available is only with 100% weight
percentage.
But each activity may have zero, one or more related space constraints with variable weight percentage, and also room not available can have any weight percentage.
So in general many cases may appear.
600---------------------------------------------------------
From mskalsi (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6042.msg33580#msg33580
Let's say a teacher teaches a common subject to two groups at the same time in the same room. Then, in the time table's final HTML output, both groups are printed
in the vertical time slots, which makes it appear a little crowded. Printing just one group in each vertical time slots would be feasible, in my opinion.
601---------------------------------------------------------
From potrempe (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6045.0
The school I'm generating a timetable with has 5 school hours (P1 to P5) for each day of the week (D1 to D5), so that's 25 hours a week. All students have 25 hours
of courses, so no gaps in the schedule.
For certain subjects that are taught twice a week or more, I need to make sure that a subject is not taught on the last hour of a day and on the first hour of
the next day. So for example, if students of group G1 have Music on P5 of D2, they should not have Music on P1 of D3, the earliest would be P3 of D3.
So what I'm trying to implement is some kind of "Min hours between activities". In the case above, I would add a constraint for two "Music" activities for a group G1
with a minimum of 3 hours between them. So:
How could I manage to do this?
Are the last hour of a day and the first hour of the next day considered "consecutive" in FET?
Liviu Lalescu:
Maybe some new official FET constraints are needed, maybe adding some additional features to the "min gaps (hours) between activities" or "students min gaps between
activity tag", to consider the days of the week to be continuous.
602---------------------------------------------------------
From GUEFFAZ REDA (on Facebook):
On Windows, add a button to minimize the FET dialogs while generating.
Liviu Lalescu: on my GNU/Linux I can do that. It is more like a platform feature/problem and I am not sure it is good to use a programming trick to fix this.
603---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Suggestions for improvement:
1) Add an option to center tables on the page when printing. --> DONE only horizontally, not vertically.
2) Solve the problem of days appearing in Arabic as broken letters in some HTML outputs.
Liviu Lalescu: more specifically, the second suggestion/problem appears in the time vertical views, where the names of the days appear divided letter-by-letter.
I consider this to be a feature, not a bug, saving space for the rest of the table.
Volker Dirr also disagrees. He says that the correct way would be to rotate the font by 90°, but that is sadly not possible in Qt with HTML.
604---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Suggested improvement to the typography of the interface: Make the width and height equal for each teacher and class table.
Liviu Lalescu: do you mean timetable view from the interface?
Muhammad Ratrout: for printing.
605---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
In FET is there Print double lessons as single lessons in interface and html output?
606---------------------------------------------------------
From Bachir Nacer Elhak Sayah (on Facebook):
When you choose this option you only get one table per page, and that will waste a lot of paper. When you choose always:double, you get 2 per page.
Is it possible to make it 3 per page?
Especially if you rotate the page like this (portrait), a lot of space is wasted.
607------------DONE in FET-6.24.1---------------------------
608---------------------------------------------------------
From Liviu Lalescu (who observed Redha Rahmane's problem):
Actually, it was his message that made me (Liviu Lalescu) to think about this problem: in the Mornings-Afternoons mode, Redha Rahmane had set some
teachers in the exclusive (Morocco) mode, and this was making the program not being able to solve the file, without him to remember this fact. A good
idea might be to mention in the list of all time constraints each teacher's Mornings-afternoons behavior, to avoid this problem.
Note: On a Facebook vote about moving the teachers' Mornings-afternoons behavior to the constraints, the vast majority of users voted to keep the
current style (in the teachers' list).
https://lalescu.ro/liviu/fet/forum/index.php?topic=6085.0
YOUSSEF HOUIET: I think that users are confused about the teacher's behavior feature due to old YouTube videos that explain how to use the program
when there were the Moroccan and Algerian versions, as well as the FET MA version. We always try to guide new users to understand that the behavior
has been moved from the constraints interface to the teachers' data.
Anyway, I have opened a poll on the subject in a Facebook group and will wait for the results.
As for my opinion, I think moving the teacher's behavior back to constraints would be a step backward in the development of the program.
MOHAMED AIT ICHOU: You can leave it as it is now, it is clear to those who use the program normally.
---
YOUSSEF HOUIET: I suggest adding a feature in the Mornings-Afternoons mode like a msgbox or a warning when user click on Data -> Teachers, and when
starting the generation process, alerting the user to pay attention to the teachers' behavior.
Liviu Lalescu: I think maybe we need to add in the list of all time constraints a list of the Mornings-afternoons behavior of the teachers (but also
keeping the current teachers' dialog, in which you choose the Mornings-afternoon behavior of the teacher)s. What do you say?
Benahmed Abdelkrim: I admit I didn't read your post very well. I think this idea is very good and will help users to detect any possible errors.
Let's summarize what can be done: Keep the morning - afternoon behavior as it is now,and add this behavior to the list of all time constraints.
In this way the user would be able to detect his errors and correct them.
Quote from @Liviu Lalescu
Or maybe move the teachers' Mornings-afternoons behavior from a teacher to a time constraint for each teacher?
Benahmed Abdelkrim: Yes, this is also a good idea with a little correction: the morning-afternoon behaviors are kept in the teacher as they are now.
This way the user has two options, not one, such as constraint min days between activities.
609---------------------------------------------------------
From pekuon (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6084.0
I am currently scheduling with many constraints; however, the school frequently changes the teaching assignments, which leads to frequent changes
in the class periods. When class periods are changed, some constraints are lost compared to the old schedule. Therefore, I would like to have
a button to export all constraints to CSV or Excel for easier tracking of any missing constraints later.
610---------------------------------------------------------
From Bahri Abderezak (on Facebook):
Say FET can place 495 out of 500 activities. We suggest to place these 495 activities and allow manual positioning of the remaining 5,
by displaying them on the right and allowing to drag-and-drop them in the timetable.
611---------------------------------------------------------
From Michael Chourdakis (on Facebook):
Implement a group of constraints, and from that group you can let FET do an AND, OR, or XOR of the constraints.
612------------DONE in FET-6.24.1---------------------------
613---------------------------------------------------------
From danghoan (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6102.0
I have 2 activities Tags, Tags A (morning), Tags B (afternoon).
1. I want to set a condition so that 2 activities Tags A and B do not appear on the same day.
2. Let me ask another question: If I want to set a condition of maximum space between morning and afternoon, how do I do it?
Liviu Lalescu:
2. Maybe teachers/students max gaps per real day.
614-----------DONE in FET-6.24.2----------------------------
615-----------DONE in FET-6.24.2----------------------------
616---------------------------------------------------------
From gt (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6119.0
I'd suggest to add the option to "Bring to front" the Menu Window (i.e. the one opening at Fet start) when it's superimposed by other windows.
It could be done by clicking the Menu Windows to activate it, if possible.
In my experience it should be very comfortable when working with small screens (laptops) and having the need to check the generated timetable
taking several windows opened at the same time (teachers, rooms, students etc.).
At moment it seems that I have to close or move off screen the other windows just to access the option in the Menu Window.
Liviu Lalescu:
This behavior is dictated by the operating system / windowing system. On my GNU/Linux XFCE, I can click on the main window and it shows, even if
I have other timetable view dialogs. If I remember correctly, on Windows the timetable views are in front of the main window. I think I cannot
modify this behavior, but I will look a bit at the options.
gt:
Yes it is a Windows "feature".
I think that a simple turnaround could be adding menu shortcuts for some options such as: Data->"All time constraints", "All space constraints" etc.
Maybe these shortcuts could be set by user?
617---------------------------------------------------------
From henozzo (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6122.0
Ho lavorato su un orario per la scuola secondaria e vorrei trovare un modo di esportare i dati in un altro orario che integra anche l'orario della
scuola primaria. Posso esportare su quel file .fet questi dati magari incollandoli? Come?
Google translate:
I worked on a timetable for secondary school and I would like to find a way to export the data to another timetable that also integrates the primary
school timetable. Can I export this data to that .fet file, perhaps by pasting it? How?
Vangelis Karafillidis:
@Liviu Lalescu, I think we have discussed about implementing some kind of feature for merging two (or more) different .fet files. It seems that
sometimes this feature would be really useful. Moreover, a multi-user preparation of the same (single) .fet file would be highly useful in some cases.
The above have to do with enhancing the usability and speeding-up the preparation of data (+constraints) for FET. At least, maybe an expert mode
for re-numbering the activities (ids) seems to be a solution, according to your post. The user could easily 'prepare' the two .fet sub-files,
so that would be compatible to each other for being merged. What do you think?
618---------------------------------------------------------
From Thai Chi Phuong (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6112.msg34042#msg34042
One more small detail but I think it will be useful for all of us: In the "Data" tab, information related to "Class", "Teacher", "Student"; "Tags".
If it is not too difficult, can you help us remove many redundant elements with just 1 click?
619---------------------------------------------------------
From Hieu Nguyen Trong:
> In the morning - afternoon mode, the interface in the bindings is not
> yet convenient for use. [...] Adjust the periods of
> the day to be straight from top to bottom similar to the schedule
> results view.
620---------------------------------------------------------
From Abu Iyad (on Facebook):
I hope you can enable the automatic lock feature for the schedules immediately after they are created.
621---------------------------------------------------------
From topposempre (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6146.0
I would like to point out a series of changes that could be useful (at least for me):
- in the activities together with the option to indicate the minimum days between the activities, there below also insert the maximum days between
the activities (useful when I have two hours of a subject in the 1+1 formulation to say that at least a certain amount must pass between the two hours
and avoid having one on Monday and one on Saturday for example)
- insert the maximum number of teachers and/or subjects possible per day (to avoid having 5 different subjects in one day)
- in the management of the hours not available for a teacher, if I have to allow an early exit to a teacher 3 days out of 5, allow the random choice
of these 3 days without punctually binding them - insert the possibility for each teacher for a late and an early entry, always chosen randomly by the
system without punctually binding them.
- I add to the function hours not available for a teacher, not only to be able to select the free day, but also the possibility to tell the system
to be able to choose a random free day except, for example, the one we will indicate. "Ex. Choose a free day except Saturday"
Liviu Lalescu:
Some of them might already be solved:
1) I consider max days between activities constraints as not used too often, and I prefer to leave the user add these constraints after adding the activity(ies).
2) Maybe you could use the new just released constraint students max activity tags from a set per day. Unfortunately, you can restrict only to 1 or 2 tags,
not 4, but you might be able to use it in a certain way.
3) Add two constraints teachers interval max days per week.
4) Teacher max days per week, and constrain this teacher to have activities on Saturday with a constraint activities occupy min time slots from selection.
622---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Is it possible to add an option to the program so that the teacher calculates the minimum and maximum daily classes and the best number of consecutive classes
to obtain a balanced schedule of classes?
Button to calculate minimum, maximum and number of consecutive shares
is possible
By the total quota of the teacher's classes and the nature of the teacher's activities
623---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
A proposal to improve the program is to add the ability to delete more than one item at once using ctrl and shift in the program tabs data, time and space.
I noticed that it is only enabled in all in the time tab.
Liviu Lalescu:
I think Muhammad Ratrout suggests multiple selection in the dialogs from the data entry (teachers, subjects, etc.) and maybe in the separate dialogs
of the time/space constraints.
624---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Suggestion for development: In statistics menu, print advanced statistics, add for print for Arabic right to left direction and center page.
625---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Make the program accept deleting the item using the delete button on the keyboard, in program screens.
626-------------------------DONE----------------------------
627---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
are there any suggestions for developing the program screens in the future:
button : Copy to
button : Apply on
Copying restrictions to more than one teacher or class
Applying unavailability to more than one teacher or class
For the purpose of acceleration
628---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Show teacher statistics number of activities and duration when adding restrictions to the teacher
Customize header and footer for table outputs
Add if possible multiline of data such as institution name
What you see fit for that
Show maximum number of hours continuously for a teacher in teacher statistics in table outputs
New suggestion to display statistics in table outputs for teachers, students, etc. and whatever you see fit.
Example : display number of activities for teacher and duration for every teacher table and other.
629---------------------------------------------------------
From Mohcene Ben Mohammed KH (on Facebook):
can you release the android or ios version of Fet? that will be very interesting for us .... we can work every where any time .... thank you ....
630---------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Please add in future button to open output folder after finishing generate.
631--------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Show or hide "---" in the timetable outputs.
632--------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Improve the display of information about subjects, students and teachers in the HTML table outputs so that the display is through another table horizontally
instead of being vertically displayed.
Liviu Lalescu: Muhammad Ratrout refers to the printing of the legend of subjects, students, and teachers - it should be done subjects legend, then on the right
the students legend, then on the right the teachers legend.
633--------------------------------------------------------
From Muhammad Ratrout (on Facebook):
You make Activities padding in print table option : Horizontal expansion only
Is it possible to add vertical expansion in the future?
634--------------------------------------------------------
From Muhammad Ratrout (on Facebook):
Please enhance program with shift key to select more elements in print screen.
Liviu Lalescu:
Muhammad Ratrout refers to selecting for instance multiple students sets with the Shift key in the Print timetable dialogs.
635--------------------------------------------------------
From Muhammad Ratrout (on Facebook):
I am showing you the problem of the broken letters of the days in the Arabic language in the vertical mode.
Letters must be connected.
(Liviu Lalescu: Muhammad Ratrout refers to time vertical print, where the names of the days are written one letter below the other,
and seems to break the correct meaning of the letters, in Arabic.)
Is it possible in the future for teachers' and students' tables to have the same dimensions (height and width) on the page through the print screen?
To make the tables look better
We want more options in the print screen to control the appearance of the tables, such as making the texts bold and other options related to the borders
in terms of appearance and bold border.
We ask you to improve the program so that the Shift button works with all program screens for ease and speed of work.
We want options for table borders and cell borders.
636--------------------------------------------------------
From thaaanos (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6042.msg34220;topicseen#msg34220
"Data to print" is a bit misleading as a menu item I had to hunt it down to find it :)
maybe "Output settings".
Also since the dialog is huge and extensive, please consider a "restore defaults" or even maybe a "custom settings" menu.
Also a setting that uses the full names in column and row headers and short names in the cells would probably what people would need most, my 2¢
Liviu Lalescu:
You can restore all the Settings to defaults. I know this is not what you suggest, but it is something.
637--------------------------------------------------------
From thaaanos (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6163.0
Since
* teachers may have websites / videoconferance room / or simply a mailto: link
* Rooms may have websites / an associated videoconferance room
* Activities or students may have an associated e-learning platform link
etc
I would find it useful if I could add this info in a url field that was easily accessible from the html timetable output
also please consider making all fields importable from cvs, so we can export them from our systems and feed fet
YOUSSEF HOUIET:
You can use comment fields
Liviu Lalescu:
Indeed, as Youssef said, you could use the comments field. You can use also the long name field or the code, which are custom strings.
Activities have only comments, for which these is no option to be printed, but all the the other information can be printed in the HTML results.
CSV should indeed be updated.
Did you see the fet files XML structure? Maybe you could replicate that.
638---------------------------------------------------------
From Mohcene Ben Mohammed KH (on Facebook):
I wanted to suggest an option
for example we want to introduce the teacher parameter... maximum afternoons
Could you introduce a selection of teachers in groups instead of introducing them one by one?
select a group of teachers and choose the maximum after option for the selected teachers
in a real day..That's why we need a restriction through which we can select only some teachers and not all of them to apply the same restriction
to them instead of entering them one by one... It takes a lot of time.
639--------------------------------------------------------
From danghoan (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6176.0
Is there a way to edit and split Activities of Teacher without having to delete and re-add them.
640--------------------------------------------------------
From Carol Stott:
I wonder if, in a possible future update, it would be possible to import
stuff like the long names, codes, and qualified subjects from a CSV
file, along with the regular-length names and comments. This would
greatly save time in inserting this data, as it takes time putting these
in one-by-one.
Furthermore, there are several teachers who all teach the same
subject/set of subjects. For example, teachers A, B, C, and D all teach
subjects E, F, and G, and it would save time to be able to import all of
this from an Excel CSV file instead of having to insert this data
teacher-by-teacher, especially with schools with large numbers of teachers.
Liviu Lalescu: Carol Stott refers in the second paragraph to the
qualified subjects E, F, and G of teachers A, B, C, and D.
641--------------------------------------------------------
From Gabriela Osaci-Costache:
1) Pentru activități, așa cum putem alege mai mulți profesori, mai multe
grupe/mai mulți ani, mai multe etichete, nu se poate să alegem mai multe
discipline, astfel încât să nu fie nevoie să scriem noi disciplina compusă
(ex.: materie A / materie B), pentru săptămânile impare/pare?
2) S-ar putea schimba ordinea butoanelor, încât butonul de Bine/Adaugă să
fie mai în dreapta? Acum, cel mai în dreapta buton este fie Închide, fie
Ajutor, după caz. Cum sunt aranjate acum sunt favorabile stângacilor. Am
văzut, de ceva vreme, că și QGIS are tot ordinea asta a butoanelor. O
explicație trebuie să fie, însă nouă ne vine peste mână. Nu e o mare
problemă, doar că am tot închis ferestre după ce setasem ce ne trebuia dând
clic pe Închide, în loc de Adaugă.
642--------------------------------------------------------
From wolfrain87 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6184.0
Se è possibile scegliere il colore in base alla sede in modo tale che chi sta in una sede ha per esempio la scritta bianca e il quadratino verde
e invece in un'altra sede si sceglie un altra combinazione in modo tale da rendere facilmente leggibile la classe e anche un docente in quale plesso
si trova tramite una leggenda.
643--------------------------------------------------------
From wolfrain87 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6185.0
Inserire la distribuzione per materia. In modo tale che gli insegnanti possono entrare in quella classe con quella materia 1 volta 2 volte fino
a n volte. In modo tale che distribuisce per una materia o tutte ogni giorno una volta solo o più di una.
644--------------------------------------------------------
From Vangelis Karafillidis:
max campus changes per day/week.
for Greece.. this problem occurs only for teachers.
the real problem is the changes per day.
the other problem is not so significant (per week).
After a Facebook discussion between Vangelis Karafillidis and Liviu Lalescu, we arrived at this conclusion:
Teacher(s)/students (set) max activity tag changes per day/week... this can solve the problem in a much simpler way.
Unfortunately, an activity can have more tags, so we might also need to add a set of tags to be checked.
Vangelis Karafillidis:
so... max activity tags pair switches per day/week
input = a pair of activity tags
number of switches
so the user could select which activity tags the constraint is going to be applied on
645--------------------------------------------------------
From vietphamvan0705 (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6192.0
Is there a way to use constraints 2.8a and 2.8b independently without having to use constraint 2.6?
You want to be able to use teacher(s) max hours per morning/afternoon without adding teacher(s) max hours per day, in the Mornings-Afternoons mode?
I will add your suggestion in the TODO list, but it is unfortunately risky to change the currently working code.
But can't you simply use min hours daily with allow empty days? The only bad situation is you cannot force at least 1 hour on each day without
allowing empty days, but this is an improbable situation.
646------------------DONE in FET-6.27.0--------------------
647--------------------------------------------------------
From Vangelis Karafillidis (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6196.0
I think that the implementation of an option for not displaying specific activities would be useful in some situations. For example an option for
not displaying activities with a specific activity tag would solve this problem.
I am referring to the generated timetables. Especially the html ones. I am not referring to the way the activities are displayed in the FET UI.
648---------------------------------------------------------
From Thai Chi Phuong (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6112.msg34390#msg34390
I have a suggestion: Can you add a constraint so that in a set of n teachers there are 1, 2 or 3 teachers busy in a day/actual day.
649---------------------------------------------------------
From Volker Dirr:
Enable by default the colors in FET?
Or maybe if someone starts FET the first time it should ask him for some of his preferred default values?
Liviu Lalescu:
There are more places where there are colors: in the interface (constraints and view timetable dialogs, print from the interface,
and the HTML level 7).
650---------------------------------------------------------
From Michael Chourdakis (on Facebook):
If an activity has home room (example: R1) and preferred rooms (example: R1, R2, R3), prefer the home room (R1) over the other rooms.
651----------------------DONE-------------------------------
652----it was already done----------------------------------
653---------------------------------------------------------
From uni_instructor:
The 'all-time-constraints' menu allows you to adjust the selection with
filters, which is a useful feature.
Has there ever been any consideration of introducing a history for the
filter terms, so that you can select previously used search terms from a
pre-selection?
654---------------------------------------------------------
From Darren McDonald:
(Liviu Lalescu: Darren talks about the Filter group boxes in the time/space constraints. In the FET versions 6.28.0 and later we don't have a label to explain
that it filters by the teacher, students set, subject, activity tag, or room).
For me it’s fine, but I think a new user might find it a bit confusing (what is the filter in the first dropdown list? Where do I filter by teacher?, etc.).
A nice option (if possible) would be to have the default selection (when no filter item is chosen) appear instead as text (“Teacher” “Student” “Subject”, etc.).
Is that a possible?
Also gradgrind suggested on the forum to add (restore as in FET-6.27.0) labels for the filters:
https://lalescu.ro/liviu/fet/forum/index.php?topic=6242.0
Also Vangelis Karafillidis reported that the filter labels are missing.
655--------------------------------------------------------
From pnlshd (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6235.0
In an exam timetable, each subject has several exam sessions of varying counts between subjects. They are usually consecutive. There can be another
subject's exam in the same room after the first one given there are hours left.
I want to have at least one empty gap between the last activity of the first subject and the first one of the second one in the same room so as to make
room for teachers to be able to get out and let others in etc, if it has to put the second subject exam in the same room.
I've looked into teacher min gaps between room changes but this is not quite what I want.
I've also looked into min gaps between a set of activities but it works on the activities entered pairwise and I don't know which activities will end up
consecutive. (Maybe I can do all the possibilities between the pairs of every other subject? I think it will have an exploding number of constraints this way)
Min gaps bw ordered pair of tags is specific to teachers and students, not rooms (that can have different teachers and students)
I am looking for something like room min gaps between two sets of activities, or room min gaps between a set of activity tags (and I can then assign a
different tag to each subject's activities so that no two subjects touch)
Maybe min gaps between activity tag switches?
Any ideas or workarounds? I can automate the creation of a workaround if it involves many constraints until a new one is introduced, if any.
Edit: teachers have max 0 room changes to stay in their room all day.
656--------------------------------------------------------
From pnlshd (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6238.0
I have a suggestion regarding the multi-threaded generation, when no timetable is generated, there can be more than one highest timetable, and if it completes,
there can also be one or more timetables
As far as I know, there is no way to select which highest (or completed) timetable to load in the application after generation ends, to view it the app itself
not using the files, view conflicts, export and so on.
I think currently some timetable gets selected and I am not sure which one, and I may want to work with another one (highest/completed).
So maybe it would be good to be able to select which one to load if there are multiple ones generated (or multiple highest) when attempting to close the multi
generation window (after having a look at the timetables using the generated files one can decide).
Another suggestion is very subtle and I don't know if it is on fet, but on single generation, when a new generation is stopped using view highest, it indeed
writes the new files in the old highest folder (I enabled single overwrite), but it somehow doesn't update the last modified date of the containing folder itself.
I am not sure if fet should do it. Still, it definitely helps to have that last modified time of the folder the same as the files inside it, because many times
there may be newer folders that show on top when I sort using last modified. I will have to look for the highest folder, double-check the last modified date of
the files inside, and so on.
657--------------------------------------------------------
From Vangelis Karafillidis:
Add a constraint of type subjects preferred rooms (to add a single constraint for multiple subjects, instead of one for each separate subject).
658---------------------------------------------------------
From GUEFFAZ REDA:
1) DONE
2) He sent to Liviu on Facebook a screenshot in the teachers / modify teacher dialogs, with texts: "Add button to change mode type of teachers with multi selection" and
"Qualified subjects and target hours with multi selection".
About (2), from Volker Dirr:
About the multi selection: In my opinion it can be used only very rarely,
at least in Germany, since nearly every combination is allowed and it is
very unlikly that you hire 2 teachers with the same subjects at the same
time. It is max "useful" if you use FET the first time. In normal case
you will never hire 2 teacher with the same subjects at the same time.
In my opinion a matrix with teachers - subjects where you can just
select/deselect a cell will be much better. Especialy if you can always
sort them by teacher name, subject and/or hide rows and columns.
659--------------------------------------------------------
From Vangelis Karafillidis:
Divide a year A by (1,2,3,4), (English Advanced, English Beginners), (French, German), (Technology 1, Technology 2), such that we have the groups:
A1 EA, A1 EB, A1 F, A1 G, A1 T1, A1 T2, ..., A4 T2.
Also, apply the same divisions from year A to year B (easier to input, to save time).
Liviu Lalescu:
I think adding a check box "First category divides permanently" and a push button "Copy categories/divisions from another year".
Vangelis Karafillidis:
Maybe a check box with the message generate additional groups accordingly to the first category?
And a push button with follow the dividing pattern of another year?
660--------------------------------------------------------
From Nahum Lipkunsky:
Groups' timetables in the FET GUI (now we have only the subgroups' timetables).
661---------------------------------------------------------
From Malamojka (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6252.0
I was just sorting out my timetable and was trying to find the fastest way to make my tags printable/not printable. I couldn't find a way to do it in bulks,
for instance to use ctrl+mouse click to chose more tags and then set printable/not printable for them but I had to click at every one of them and then set
printable/not printable for each of them. The same thing happens if you want to delete teachers for instance or delete subjects.
I noticed you can now activate more than one activity by using ctrl+mouse click or even shift+mouse click. Could you do that for tags/teachers/subjects also?
662---------------------------------------------------------
From Malamojka (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6254.0
Is there a possibility to include the number of students at seperate activities? The reason I need this and add it manually is that while I know the number
of students for each year/group/subgroup the number at an activity can vary (be higher or lower than what you would guess from the number of students in
year/group/subgroup), because we can always have last years students attending if they didn't pass or have students passing an exam one year in advance.
So for me it would be great if I could also import the number of students at an activity when importing activities.
663--------------------------------------------------------
From Nahum Lipkunsky:
Add pause/resume on the timetable generation screen, or even hibernation option.
664---------------------------------------------------------
From GUEFFAZ REDA:
Add a menu item to remove all the fet-results directory (he sent to Liviu Lalescu a picture in which this option is added in the menu to select the output
directory and whether to overwrite the single generation results).
665--------------------------------------------------------
From Nahum Lipkunsky:
2 activities - mutually exclusive (same group).
Both are constrained with the same preferred time (preset)
FET loops (forever?) - this is very easy to identify pre-run validation.
666--------------------------------------------------------
From Vangelis Karafillidis:
Implement the possibility to modify the whole selection of constraints in the specialized dialogs. The teachers/students/activities will remain constant,
and the rest of data will be set in all selected constraints.
Another suggestion from Vangelis: implement some check boxes for the information that should remain fixed and that which should be altered.
667--------------------------------------------------------
From GUEFFAZ REDA:
He sent Liviu Lalescu on Facebook a screenshot with suggestions to add the long name and the code of the teacher to show/hide; other suggestion
in this screenshot: A 'Hide' button in the timetable view days horizontal. Also, Lock/Unlock 'All time', 'All Space', 'All both'.
668--------------------------------------------------------
From GUEFFAZ REDA:
Stretch the timetables to occupy a whole page when printing them.
669---------------------------------------------------------
From Željko Vrabec (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6260.0
It would be really nice if tables in print (preview) dialog could be all the same width.
670--------------------------------------------------------
From GUEFFAZ REDA:
He sent Liviu Lalescu on Facebook two screenshots with suggestions:
1) Teachers:
Subject: Math, etc., combo box
Number of teachers to add: 6
Qualified subjects: Math
Target hours: ...
Mornings-Afternoons behavior: Unrestricted (Algeria), combo box.
Generate 6 teachers.
2) Add teacher:
Mornings-Afternoons: Unrestricted (Algeria), list box (Liviu Lalescu: I think this is a mistake, should be list box for qualified subjects).
Code: ...
Long name: ...
Qualified subjects: ... (Liviu Lalescu: I think list box).
Target hours: ...
671--------------------------------------------------------
From GUEFFAZ REDA:
He sent Liviu Lalescu on Facebook a screenshot with suggestions:
In the view teachers days horizontal timetable, he added four circles: "Name", "Long Name", "Code", "Qualified Subjects", with arrows from "Filtered List of Teacher".
I (Liviu Lalescu) am not sure what the suggestion means exactly.
Further clarification by GUEFFAZ REDA:
Les profs seront filtrer par matiere.(qualified subjects)
672--------------------------------------------------------
From GUEFFAZ REDA:
He sent Liviu Lalescu on Facebook three screenshots in which the option "Merge" cells in the timetable view dialogs seemed not to work. The problem is that these
were two separate activities from the same larger split activity, which were placed consecutively. This is a feature, not a bug.
673--------------------------------------------------------
From Nahum Lipkunsky:
Do you remember I have mentioned the need to provide a partial
solution by eliminating the "hard to schedule activities" as incremental
process ? Well, it proves to be very effective in the process of
identifying issues in the data. I.e before we start the process of
relieving constraints, we
would like to keep the quality of the solution in a partial solution and
check for data "modification" which can fix it.
Anyways it would be very helpful to enable activity deactivation from
the view of initial order evaluation.... it will save the need to close the
list,
look tor the activity by Id in the Activities list, and deactivate it
there, then re-generate.... or even better : a one click, deactivate and
re-generate would be very nice....
674--------------------------------------------------------
From Volker Dirr:
Why not adding the terms constraints always? So remove the terms mode,
add the constraint and then you can use terms mode constraint in
Official, MA and BP Mode.
675---------------------------------------------------------
From JOYAL ISAC S (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6288.0
Is it possible to import csv in time - teachers not available times.
676---------------------------------------------------------
From maumartelli (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6290.0
1) In the hours dialogs, add Up/Down buttons, to move/order the hours, as it is for example in the subjects dialogs.
Probably also for days.
2) Add an option to hide empty rows in the timetables.
677--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6292.0
He suggests a virtual break in the timetable view dialogs, just so that the timetable appears clearer
(for instance between the 2nd and the 3rd FET hours - for the Mornings-Afternoons mode).
678---------------------------------------------------------
From infoo_ (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6298.msg35006#msg35006
About constraints with times tables:
The possibility of dragging the mouse for multiple selection instead of single clicking on every adjacent slot of teacher not available times table
(and possibly other tables with X and empty):
It should also work in every direction (not only vertically).
679--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6311.0
Fixed Random Seed with checkbox
And show a warning that it is fixed
(GUEFFAZ REDA showed us a screenshot in the selection of the random seed, in which he added a check box, Fixed Random Seed.)
Volker Dirr:
I have got a similar feature in StElTo, but I have a single checkbox only. I can't see an advantage of 2 (or more) checkboxes. I can only see disadvantages
if you fix only some numbers.
But I must also admit, that I added this feature only while developing and checking my source to save a bit time as a developer in some rare cases. I can't see
advantages for normal users.
Also, StElTo is single core only. But FET is multi core. So be aware that core 2 and higher do other things than you expect and it is probably because of that
much more difficult to see that you fixed the seed.
So in my opinion: For developers this is sometimes useful. For normal FET users this is critical. I can't see advantages for normal FET users, I can see only
disadvantages for normal users.
Liviu Lalescu:
Yes, this is also my opinion. It is very risky for users, they might generate the same timetable over and over again. Yes, for multiple generation the random
seed is not the same, but will be constant for the same number of threads.
Volker Dirr:
I think/suggest:
If you add this feature, then always add a warning if you start generating, that the seed is fixed and that it is a normally bad idea to have a fixed seed.
Recommend to unfix it again.
680---------------------------------------------------------
From infoo_ (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6313.0
I would like to make a very small suggestion for tabs:
In multi generation menu:
Suppose 6 threads, it would be nice that we can do the following using wheel mouse and arrows keys when focus on tabs of threads:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 1 -> ...
6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 6 -> ...
Actually we have:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> we can't return to 1
6 -> 5 -> 4 -> 3 -> 2 -> 1 -> we can't return to 6
Also it can be implemented in Activity menu, subactivities tabs
This is for the solely purpose of checking more quickly max placed activities etc. For 2 or 3 threads (or subactivity tabs) it does not impact, but for
larger threads like 6 or 7 yes
681---------------------------------------------------------
From Bouredha Youcef (on Facebook):
Suggestion:
When, for example, the mathematics subject for a specific department consists of 5 sub-activities assigned to a specific professor
Subactivity 1 or Subactivity 2 is tagged with a specific tag
If we want to change the professor, the program removes the tag from the subactivity
We want the tag to remain for the subactivity if we change the professor
Liviu Lalescu:
I think you need to edit the subactivities, not the activities.
Change the teacher from the subactivities.
Bouredha Youcef:
When promoting more individuals or making it easier through agency
But if the number required to be changed is large, it will require more time
682---------------------------------------------------------
From Thai Chi Phuong (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6112.msg35051#msg35051
Can you help me add a constraint: "I have n teachers, in a real day/day only n-i teachers come to school."
The second post of Thai Chi Phuong:
Maybe my wording is not good, but my problem is: "I have a small group of teachers-teaching the same subject, and I want in 1 day/actual day only 1 (2) teachers
not to come to school". I used the maximum number of days constraint but encountered a case where there were days/actual days with many (2,3,4,..) teachers not
to come to school.
Liviu Lalescu:
I think you are suggesting the constraint for the minimum number of teachers from a set of teachers to be present on each day/real day. Unfortunately, it looks
complicated and also I am not sure it is possible to implement efficiently/feasible.
683---------------------------------------------------------
From Vangelis Karafillidis:
He suggested an option Merged/Not merged for the HTML timetables (for activities with duration >=2); the Not merged selection would help the import in a
spreadsheet program.
684---------------------------------------------------------
From infoo_ (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6319.0
I would like to suggest two buttons for activities dialog (maybe also Modify subactivities):
- One button for moving an activity up;
- One button for moving an activity down;
This is present in Time constraints dialog and it is nice, but not in activities.
Liviu Lalescu:
I think other users suggested this (or Sort activities). However:
1) Most important reason is that FET relies on increasing and adjacent ids for the activities.
2) I prefer to have the ids ordered, and also the first component is not indented, while the next are indented.
infoo_:
In that case, moving the entire split activity would be ok. I think users don't want to change subactivities order, but between activities
Liviu Lalescu:
It might be working this way.
Also, all the filters should be deactivated (Teacher, Students, Subject, Activity tag, and Filter).
685--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6320.0
GUEFFAZ REDA suggests a complex heading for printing the timetables, including a title, and information on the left and on the right above each
teacher's table. He also suggests to write the number of working hours for the teacher.
688--------------------------------------------------------
From Željko Vrabec (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6323.0
Is there a possibility to add an option to show long names of hours in timetables views?
(I know it's possible to switch long names and names in my case, but then I can't to get them to be unique.)
687--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6325.0
Sometimes we have to use the program with multiple databases to generate schedules or help some colleagues. Can you program the software to open, say,
four different databases and let it generate the tables all at once?
688--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6326.0
Shutown - sleep - save and locking or other option After end Generate.
689--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6329.0
Repeat Activities - with copy paste
select all ===> copy ====> paste To ...
GUEFFAZ REDA posted a picture of this suggestion, a modified activities dialog: "Copy all activities of
4M1 to other students: 4M2, 4M3, ..., without teachers, because the process is repeated with all in each level.
690--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6331.0
1- Display a message indicating that the database is locking on opening and show an image or color to reflect that.
note :
This usually appears before generating the tables by default.
These notes should be displayed, if possible, at the bottom of the program interface:
1- Display the size of the fet-results folder.
2- Display the size of the autosave folder.
3- Display the size of the Restore files.
4- Indicate whether the program is connected to the internet or not.
GUEFFAZ REDA also showed us a screenshot with a fet file in Windows explorer with added text:
"Autodetect icon of Database".
691--------------------------------------------------------
From GUEFFAZ REDA (on forum):
https://lalescu.ro/liviu/fet/forum/index.php?topic=6334.0
GUEFFAZ REDA showed a dialog listing the time constraints of type teacher not available times with an added Subject filter.
|