Beiträge und Aktuelles aus der Arbeit von RegioKontext

Oft ergeben sich in unserer Arbeit Einzelergebnisse, die auch über das jeweilige Projekt hinaus relevant und interessant sein können. Im Wohnungs- marktspiegel veröffentlichen wir daher ausgewählte eigene Analysen, Materialien und Texte. Gern dürfen Sie auf die Einzelbeiträge Bezug nehmen, wenn Sie Quelle und Link angeben.

Stichworte

Twitter

Folgen Sie @RegioKontext auf Twitter, um keine Artikel des Wohnungsmarkt- spiegels zu verpassen.

Über diesen Blog

Informationen über diesen Blog und seine Autoren erhalten sie hier.

connect 4 solver algorithm

10.05.2023

Why are players required to record the moves in World Championship Classical games? It also allows to prune the search tree as soon as we know that the score of the position is greater than beta. /Rect [244.578 10.928 252.549 20.392] What is the symbol (which looks similar to an equals sign) called? Transposition table 8. /Type /Annot We also verified that the 4 configurations took similar times to run and train. The code to do this is very similar to the winning alignment check, utilising a few bitwise operations. /Rect [310.643 10.928 317.617 20.392] You can contribute to the translation of this website in other languages by providing a translated version of this localization file. * Indicates whether a column is playable. Two additional board columns, already filled with player pieces in an alternating pattern, are added to the left and right sides of the standard 6-by-7 game board. Are these quarters notes or just eighth notes? The idea is to reduce this epsilon parameter over time so the agent starts the learning with plenty of exploration and slowly shifts to mostly exploitation as the predictions become more trustable. /A << /S /GoTo /D (Navigation1) >> The first of these, getAction, uses the epsilon decision policy to get an action and subsequent predictions. The object of the game is also to get four in a row for a specific color of discs. This is not how you usually train neural nets Allis (1998). /Type /Annot How to force Unity Editor/TestRunner to run at full speed when in background? Embedded hyperlinks in a thesis or research paper. Later, with more computational power, the game was strongly solved using brute force resolution. mean time: average computation time (per test case). @Yuval Filmus: Well, neural nets act mainly as classifiers so the idea of using them for getting a good player is very reasonable. The game was first sold under the Connect Four trademark[10] by Milton Bradley in February 1974. If it is, we can train our agent using the train_step() function and play the next game. /Border[0 0 0]/H/N/C[.5 .5 .5] Optimized transposition table 12. Each player has a color and drops succesively a disc of his color in one column, the disc falls down to the lowest empty cell of the column. >> endobj 48 0 obj << Start with the simplest AI, and see if/when it fails, or can be improved. 49 0 obj << Also, the reward of each action will be a continuous scale, so we can rank the actions from best to worst. stream This is likely the strongest move in the position--make it! Each player takes turns dropping a chip of his color into a column. Minimax algorithm is a recursive algorithm which is used in decision-making and game theory especially in AI game. /Rect [317.389 10.928 328.348 20.392] // there is no need to keep beta above our max possible score. The algorithm performs a depth-first search (DFS) which means it will explore the complete game tree as deep as possible, all the way down to the leaf nodes. Which language's style guidelines should be used when writing code that is supposed to be called from another language? C++ implementation of Connect Four using Alpha-beta pruning Minimax. Notice that the decision tree continues with some special cases. /A << /S /GoTo /D (Navigation55) >> /Type /Annot A score can be displayed for each playable column: winning moves have a positive score and losing moves have a negative score. Up to this point, boards were represented by 2-dimensional NumPy arrays. The solved conclusion for Connect Four is first-player-win. At any node of the tree, alpha represents the min assured score for the maximiser, and beta the max assured score for the minimiser. 42 0 obj << In this project, the AI player uses a minimax algorithm to check for optimal moves in advance to outperform human players by knowing all possible moves rationally. With the scoring criteria set, the program now needs to calculate all scores for each possible move for each player during the play. The idea here is to get annotated (both good and bad) positions and to train a neural net. Solving Connect 4: how to build a perfect AI. Github Solving Connect Four 1. /Border[0 0 0]/H/N/C[1 0 0] rev2023.5.1.43405. // It's opponent turn in P2 position after current player plays x column. This strategy also prevents the opponent from setting a trap on the player. Initially, the game was first solved by James D. Allen (October 1, 1988), and independently by Victor Allis two weeks later (October 16, 1988). We will use a minimal interface allowing us to check if a column is playable, play a column, check if playing a column makes an alignment and get the number of moves played so far. It was also released for the Texas Instruments 99/4 computer the same year. /Subtype /Link so which line is the index bounds errors occuring on? Placing another piece in that column would be invalid, however the environment still allows you to attempt to do so. >> endobj Finally, when the opponent has three pieces connected, the player will get a punishment by receiving a negative score. The first player to make an alignment of four discs of his color wins, if the board is filled without alignment its a draw game. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. (n.d.). By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. Please >> endobj If your looking for a suitable solution that you can implement quickly, I would go with the Minimax algorithm because this is the typical kind of problem where you would use Minimax. You'd also need to give it enough of a degree of freedom so that it can adapt to any arbitrary strategy played. /A << /S /GoTo /D (Navigation2) >> Lower bound transposition table Part 4 - Alpha-beta algorithm While it is not able to win 100% of the games against other computers, it provides the average Connect 4 player with a worthy opponent. Which solution would best perform under 1 second? What is Wario dropping at the end of Super Mario Land 2 and why? * Recursively solve a connect 4 position using negamax variant of min-max algorithm. During the development of the solution, we tested different architectures of the neural network as well as different activation layers to apply to the predictions of the network before ranking the actions in order of rewards. 4 Answers. This readme documents the process of tuning and pruning a brute force minimax approach to solve progressively more complex game states. mean time: average computation time (per test case). /Rect [288.954 10.928 295.928 20.392] KeithGalli/Connect4-Python. Gilles Vandewiele 231 Followers Is "I didn't think it was serious" usually a good defence against "duty to rescue"? To train a deep Q-learning neural network, we feed all the observation-action pairs seen during an episode (a game) and calculate a loss based on the sum of rewards for that episode. Connect Four also belongs to the classification of an adversarial, zero-sum game, since a player's advantage is an opponent's disadvantage. Any move ordering heuristic also needs to be pretty efficient, otherwise the overheads from running it quickly surpass the benefits of increased pruning. Should I re-do this cinched PEX connection? You will find all the bibliographical references in the Bibliography chapter of the PhD in case you need further information. Two players move and drop the checkers using buttons. Content Discovery initiative April 13 update: Related questions using a Review our technical responses for the 2023 Developer Survey. Making statements based on opinion; back them up with references or personal experience. Size variations include 54, 65, 87, 97, 107, 88, Infinite Connect-Four,[20] and Cylinder-Infinite Connect-Four. Use MathJax to format equations. What does "col++" do? The final outcome checks if the game is finished with no winner, which occurs surprisingly often. This is where bitboards really come into their own - checking for alignments is reduced to a few bitwise operations. Then, the minimizer will take the next turn, which has a worst-case initial value that equals positive infinity. Another benefit of alpha-beta is that you can easily implement a weak solver that only tells you the win/draw/loss outcome of a position by calling evaluating a node with the [-1;1] score window. mean nb pos: average number of explored nodes (per test case). */, /** The objective of the game is to be the first to form a horizontal, vertical, or diagonal line of four of one's own tokens. Then the Negamax function allowing to score any non final (without aligment) position is: This solver allows to compute the score of any non final position and not only its win/draw/loss outcome. How to validate a connect X game (Tick-Tak-Toe,Gomoku,)? /Rect [326.355 10.928 339.307 20.392] Transposition table 8. The first player can always win by playing the right moves. Move exploration order 6. Readme License. Each player has an equal number of pieces (21) initially to drop one at a time from the top of the board. Introduction 2. Repeat this procedure as long as time remains for the algorithm to run. Why refined oil is cheaper than cold press oil? */, /* Sterling Publishing Company (2010). To subscribe to this RSS feed, copy and paste this URL into your RSS reader. * @return number of moves played from the beginning of the game. // init the best possible score with a lower bound of score. Use Git or checkout with SVN using the web URL. /Type /Annot /Trans << /S /R >> GameCrafters from Berkely university provided a first online solver5 computing the number of remaining moves to perform the perfect strategy. Each terminal node will be compared with the value of the maximizer and finally store the maximum value in each maximizer node. java arrays algorithm netbeans Share endstream >> endobj Most AI implementation explore the tree up to a given depth and use heuristic score functions that evaluate these non final positions. /A << /S /GoTo /D (Navigation45) >> The first solution was given by Allen and, in the same year, Allis coded VICTOR which actually won the computer-game olympiad in the category of connect four. Any ties that arising from this approach are resolved by defaulting back to the initial middle out search order. The solver uses alpha beta pruning. We start with a very basic and inefficient solver that will be improved little by little. We built a notebook that interacts with the Connect 4 environment API, takes the output of each play and uses it to train a neural network for the deep Q-learning algorithm. The solver has to check for alignments of 4 connected discs after (almost) every move it makes, so it's a job that's worth doing efficiently. >> endobj /A << /S /GoTo /D (Navigation1) >> /Rect [252.32 10.928 259.294 20.392] wC}8N. + Thanks for sharing this! For these reasons, we consider a variation of the Q-learning approach, which is the Deep Q-learning. At this time, it was not yet feasible to brute force completely the game. In the example below, one possible flow is as follows: If a person has aged less than 30 and does not eat many pizzas, then that person is categorized as fit. Better move ordering 11. Anticipate losing moves 10. Of these, the most relevant to your case is Allis (1998). Time for some pruning Alpha-beta pruning is the classic minimax optimisation. Connect Four March 9, 2010Connect Four is a tic-tac-toe like game in which two players dropdiscs into a 7x6 board. Learn more about Stack Overflow the company, and our products. We trained the model using a random trainer, which means that every action taken by player 2 is random. c4solver. /Subtype /Link Both the player that wins and the player that loses get tickets. If the actual score of the position greater than beta, than the alpha-beta function is allowed to return any lower bound of the actual score that is greater or equal to beta. /Type /Annot I would suggest you to go to Victor Allis' PhD who graduated in September 1994. The pieces fall straight down, occupying the lowest available space within the column. MathJax reference. >> endobj By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. Therefore, the minimax algorithm, which is a decision rule used in AI, can be applied. * This function should not be called on a non-playable column or a column making an alignment. >> endobj The tricky part is the diagonal case. If your approach is to have it be a normal bot, though I think this would work fine. You can get a copy of his PhD here. https://github.com/KeithGalli/Connect4-Python. /Border[0 0 0]/H/N/C[.5 .5 .5] Taking turns, each player places one of their own color discs into the slots filling up only the bottom row, then moving on to the next row until it is filled, and so forth until all rows have been filled. Alpha-beta algorithm 5. The project goal is to investigate how a decision tree is applied using the minimax algorithm in this game by Artificial Intelligence. /Type /Annot It only takes a minute to sign up. If nothing happens, download GitHub Desktop and try again. If it doesnt, another action is chosen randomly. The next step is creating the models itself. However, with Twist & Turn, players have the choice to twist a ring after they have played a piece. According to Muros [4], this. It provides optimal moves for the player, assuming that the opponent is also playing optimally. >> endobj /MediaBox [0 0 362.835 272.126] Bitboard 7. , Victor Allis, A Knowledge-based Approach of Connect-Four, Vrije Universiteit, October 1988, John Tromp, Johns Connect Four Playground, (defunct) GameCrafters, Berkeley University, Connect Four solver, Christian Kollmann, Graz University of Technology, Connect Four solver, Pascal Pons, gamesolver.org, 2015, Connect Four solver, Solving Connect 4: how to build a perfect AI, A Knowledge-based Approach of Connect-Four. count is the variable that checks for a win if count is equal or more than 4 means they should be 4 or more consecutive tokens of the same player. Game states (represented as nodes of the game tree) are evaluated by a scoring function, which the maximising player seeks to maximise (and the minimising player seeks to minimise). /A << /S /GoTo /D (Navigation55) >> */, // check if current player can win next move. Test protocol 3. /A << /S /GoTo /D (Navigation55) >> Refresh the page, check Medium 's site status, or find something interesting to read. Nevertheless, the strategy and algorithm applied in this project have been proved to be working and performing amazing results. "PopOut" redirects here. /Subtype /Link 4-in-a-Robot did not require a perfect solver - it just needed to beat any human opponent. However, when games start to get a bit more complex, there are millions of state-action combinations to keep track of, and the approach of keeping a single table to store all this information becomes unfeasible. Allen also describes winning strategies[15][16] in his analysis of the game. The two players then alternate turns dropping one of their discs at a time into an unfilled column, until the second player, with red discs, achieves a diagonal four in a row, and wins the game. Players throw basketballs into basketball hoops, and they show up as checkers on the video screen. Test protocol 3. Im designing a program to play Connect 6, a variation of connect 4. /A << /S /GoTo /D (Navigation2) >> Transposition table 8. Other marked game pieces include one with a wall icon, allowing a player to play a second consecutive non-winning turn with an unmarked piece; a "2" icon, allowing for an unrestricted second turn with an unmarked piece; and a bomb icon, allowing a player to immediately pop out an opponent's piece. OOP(?). * @param: alpha < beta, a score window within which we are evaluating the position. >> endobj What is the best algorithm for overriding GetHashCode? /Border[0 0 0]/H/N/C[.5 .5 .5] * - if alpha <= actual score <= beta then return value = actual score James D. Allen, Expert Play in Connect-Four, James D. Allen, The Complete Book of Connect 4: History, Strategy, Puzzles. Test protocol 3. /Rect [188.925 2.086 228.037 8.23] This is done through the getReward() function, which uses the information about the state of the game and the winner returned by the Kaggle environment. This simplified implementation can be used for zero-sum games, where one player's loss is exactly equal to another players gain (as is the case with this scoring system). Borrowed from dynamic programming, a memoization cache trades increased memory requirements for decreased computation time. @Slvrfn It's a wonderful idea which could be applied to, https://github.com/JoshK2/connect-four-winner, How a top-ranked engineering school reimagined CS curriculum (Ep. Short story about swapping bodies as a job; the person who hires the main character misuses his body. A staple of all board game solvers, the minimax algorithm simulates thousands of future game states to find the path taken by 2 players with perfect strategic thinking. 56 0 obj << This tutorial explains, step-by-step, how to build the Artificial Intelligence behind this Connect Four perfect solver. The final while loop checks if the game is finished. about_author_title = The Author: Pascal Pons about_author = Do not hesitate to send me comments, suggestions, or bug reports at connect4@gamesolver.org . Instead, the basic check algorithm is always the same process, regardless of which direction you're checking in. /Rect [267.264 10.928 274.238 20.392] sign in /Border[0 0 0]/H/N/C[.5 .5 .5] This logic is also applicable for the minimiser. /Border[0 0 0]/H/N/C[1 0 0] could you help me with doing this from top right to bottom left or vice versa, I've been stuck for hours but don't want to create a new question when I've found this. /Length 1094 A big thank you to the translators. Second, when both players make all choices (42 in this case) and there are still no 4 discs in a row, the game ends as a draw, and the decision tree stops. Does a password policy with a restriction of repeated characters increase security? @DjoleRkc this isn't really the place for asking new questions, but I'll give you a hint. We will see in the following parts of this tutorial how to optimize it step by step. You will note that this simple implementation was only able to process the easiest test set. How do I check if a variable is an array in JavaScript? @MarcB this algorithm does NOT return any bound error, the issue is more of a logical mistake because sometimes doesn't return a win when 4 elements are in a row and sometimes it returns a win when less than 3 elements are in a row. /Type /Annot Using this structure, the game state above can be fully encoded as the two integers in figure 3. In total, there are five possible ways. Solving Connect 4: how to build a perfect AI. We therefore have to check if an action is valid before letting it take place. Before play begins, Pop 10 is set up differently from the traditional game. For the green lines, your starting row position is 0 maxRow - 4. There are most likely better ways to do this, however the model should learn to avoid invalid actions over time since they result in worse games. Rewards also have to be defined and given. /** Milton Bradley (now owned by Hasbro) published a version of this game called "Connect Four" in . MinMax algorithm 4. * Reccursively score connect 4 position using negamax variant of alpha-beta algorithm. /Rect [-0.996 262.911 182.414 271.581] Bitboard 7. * - negative score if your opponent can force you to lose. For some reason I am not so fond of counters, so I did it this way (It works for boards with different sizes). Browse other questions tagged, Where developers & technologists share private knowledge with coworkers, Reach developers & technologists worldwide. The absolute value of the score gives you the number of moves before the end of the game. /Type /Annot /A << /S /GoTo /D (Navigation1) >> Better move ordering 11. Standing on the shoulders of giants: some great resources I've learnt from, Figure 1: minimax game tree containing a winning path (modified from here), Figure 2: the indexing of bits to form a bitboard, with 0 as the rightmost bit (modified from here), Figure 3: Encoding bitboards for a game state, Creating the (nearly) perfect Connect 4 bot, A score of 2 implies the maximiser wins with his second to last stone, A score of -1 implies the minimiser wins with his last stone. There are many variations of Connect Four with differing game board sizes, game pieces, and gameplay rules. Then, they will take turns to play and whoever makes a straight line either vertically, horizontally, or diagonally wins. Solving Connect 4 can been seen as finding the best path in a decision tree where each node is a Position. /Rect [278.991 10.928 285.965 20.392] Connect Four. Thanks for contributing an answer to Computer Science Stack Exchange! */, /** Stack Exchange network consists of 181 Q&A communities including Stack Overflow, the largest, most trusted online community for developers to learn, share their knowledge, and build their careers. A board's score is positive if the maximiser can win or negative if the minimiser can win. The second phase move ordering uses a slightly more targeted approach, in which each playable move is evaluated to see how many 3-disc alignments it produces (these have strong potential to create a winning alignment later). /Subtype /Link /A<> Connect Four also belongs to the classification of an adversarial, zero-sum game, since a player's advantage is an opponent's disadvantage. /A << /S /GoTo /D (Navigation1) >> I hope this tutorial will be a comprhensive and useful resource for intermediate or advanced algorithm and computer science trainings. The starting point for the improved move order is to simply arrange the columns from the middle out. The first step is to get an action and then check if the it is valid. * @return true if current player makes an alignment by playing the corresponding column col. Deep Q Learning is one of the most common algorithms used in reinforcement learning. This approach speeds up the learning process significantly compared to the Deep Q Learning approach. By now we have established that we will build a neural network that learns from many state-action-reward sets. Mine7, is the acheivement of a nostagic project: my first big computer program was a Connect Four (non perfect) AI, coded long time ago when I was 16 years old. The rst player to get four in a row (eithervertically, horizontally, or diagonally) wins. GitHub. /Rect [274.01 10.928 280.984 20.392] /Parent 72 0 R Recently John Tromp has calculated the game-theoretic value for all 8-ply connect-four positions (Tromp, 1993).". Alpha-beta algorithm 5. Which was the first Sci-Fi story to predict obnoxious "robo calls"? Of course, we will need to combine this algorithm with an explore-exploit selector so we also give the agent the chance to try out new plays every now and then, and expand the lookup space. Weights are computed by the model using every observation from a game, and softmax cross entropy is then performed between the set of actions and weights. to use Codespaces. /Border[0 0 0]/H/N/C[1 0 0] You can read the following tutorial (with source code) explaining how to solve Connect Four . // compute the score of all possible next move and keep the best one. while when its your opponents turn, the score is the minimum score of next possible positions (your opponent will play the move that minimizes your score, and maximizes his). Then, play the game making completely random moves until a terminal state (win, loss or draw) is reached. You should probably break out of the loop instead and check the next direction instead (if you didn't find four matches). You can search positions up to your precise time bound in CPU/clock time. /A << /S /GoTo /D (Navigation1) >> I like this solution because it's able to check an arbitrary board rather than needing to know what the last player's move was. Aside from the knowledge-based approach and minimax, I'd recommend looking into a Monte Carlo method. * This strategy is a powerful weapon in the fight against asymptotic complexity - it caps the maximum time the solver spends on any given move. We are then ready to start looping through the episodes. /Annots [ 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R ] 40 0 obj << /Border[0 0 0]/H/N/C[.5 .5 .5] As a first step, we will start with the most basic algorithm to solve Connect 4. To implement the Negamax reccursive algorithm, we first need to define a class to store a connect four position. Is it safe to publish research papers in cooperation with Russian academics? It means that their branches of choice are reduced by one. */, /** For example if its your turn and you already know that you can have a score of at least 10 by playing a given move, there is no need to explore for score lower than 10 on other possible moves. Connect Four is a strongly solved perfect information strategy game: first player has a winning strategy whatever his opponent plays. N/A means that the algorithm was too slow to evaluate the 1,000 test cases within 24h. * Position containing aligment are not supported by this class. Better move ordering 11. The Game is Solved: White Wins. Loop (for each) over an array in JavaScript, Image Processing: Algorithm Improvement for 'Coca-Cola Can' Recognition. /Subtype /Link Other than that, finally a last-stone-independent solution! * @param col: 0-based index of a playable column. Did the drapes in old theatres actually say "ASBESTOS" on them? Note that while the structure and specifics of the model will have a large impact on its performance, we did not have time to optimize settings and hyperparameters. * the number of moves before the end you will lose (the faster you lose, the lower your score). /Border[0 0 0]/H/N/C[.5 .5 .5] While it strongly solves Connect 4, the following benchmark shows that it is not at all efficient. We are building the next-gen data science ecosystem https://www.analyticsvidhya.com, AI | Data Science | Classical Music | Projects: (https://github.com/chiatsekuo), https://github.com/KeithGalli/Connect4-Python. 46 forks When three pieces are connected, it has a score less than the case when four discs are connected. MinMax algorithm 4. You could perhaps do a minimax to try to find some optimal move or you could manually create a data set where you choose what you think is a good move. Weak solvers only compute the win/draw/loss outcome and strong solvers compute the score taking into account the number of moves before the end of the game. In other words, we need to have an opponent that will allow the network understand if a move (or game) was played well (resulting winning) or bad (resulting in losing). 53 0 obj << In this tutorial we will build a perfect solver and wont rely on heuristic scores. Also, are there any other additional resources you suggest I have a look at? What is the symbol (which looks similar to an equals sign) called? /Rect [346.052 10.928 354.022 20.392] Github Solving Connect Four 1. Finally, the maximizer will then again choose the maximum value between node B and node C, which is 4 in this case. I looked around the web, but couldn't find anything relevant. The final function uses TensorFlows GradientTape function to back propagate through the model and compute loss based on rewards. The neat thing about this approach is that it carries (effectively) zero overhead - the columns can be ordered from the middle out when the Board class initialises and then just referenced during the computation. * @return true if the column is playable, false if the column is already full. 63 0 obj << For example, if winning a game of connect-4 gives a reward of 20, and a game was won in 7 steps, then the network will have 7 data points to train with, and the expected output for the best move should be 20, while for the rest it should be 0 (at least for that given training sample). For example, considering two opponents: Max and Min playing. First, the program will look at all valid locations from each column, recursively getting the new score calculated in the look-up table (will be explained later), and finally update the optimal value from the child nodes. Middle columns are more likely to produce alignments, so they are searched first. The best answers are voted up and rise to the top, Start here for a quick overview of the site, Detailed answers to any questions you might have, Discuss the workings and policies of this site. What were the most popular text editors for MS-DOS in the 1980s? /A << /S /GoTo /D (Navigation6) >> In addition, since the decision tree shows all the possible choices, it can be used in logic games like Connect Four to be served as a look-up table. By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. If the actual score of the position is within the range, than the alpha-beta function should return the exact score. The code for solving Connect Four with these methods is also the basis for the Fhourstones integer performance benchmark. * the number of moves before the end you can win (the faster you win, the higher your score) Connect Four was released for the Microvision video game console in 1979, developed by Robert Hoffberg. Your score is the oposite of The AI player will then take advantage of this function to predict an optimal move. [according to whom?]. Work fast with our official CLI.

Dr Schneider Dentist Abuse, How Much Does A Partner Make At Kpmg?, Who Are The Jenkins Brothers In Rango, Articles C

Stichwort(e): Alle Artikel

Alle Rechte liegen bei RegioKontext GmbH