WANTED: Programmer looking for an algorithmic challenge
-
I apologize in advance if this is the wrong forum for this post. It is definitely algorithm-related, though it may classify just as much as a personal RFP: I am looking for a programmer who is looking for an algorithmic challenge. While I am a business applications developer by day, my hobby/pet-project has been the development of a railroad simulator/"video game". (Check out this series of screen shots.) Most of my endeavor has been very successful. However, where I feel totally defeated is in programming of the brake systems, which deal with the flow of compressed air. I do not believe you need to be an expert in either brake systems or fluid dynamics. You just have to be good at solving algorithms. I can give you enough of a crash course to know what you need regarding trains. Regarding fluid dynamics, one has to remember this is a real-time video game. I don't want to waste lots of CPU power performing excessively accurate calculations. In fact, as long as the desired behavior is achieved, I don't really care how realistic the underlying algorithm is. "What is the 'desired behavior'," you ask? Take a look at this article, which describes in detail what I'm trying to simulate. If you have general questions about what I am asking, please post those publicly on this thread so others can read the responses. However, I have also enabled private responses to this message for those who would like to proceed with this and therefore need to take the discussion outside of this thread. As I said before, this is a pet project. It is not commercially funded. Therefore I do not have resources to pay -- at least not a lot. I might be able to contribute a little something for your time if you come up with the winning algorithm. But primarily you should only take this on if you're in it for the interesting challenge. Based on my experience, it's guaranteed to give you hours of hair-pulling frustration and nightmares in between. Thanks for reading.
-
I apologize in advance if this is the wrong forum for this post. It is definitely algorithm-related, though it may classify just as much as a personal RFP: I am looking for a programmer who is looking for an algorithmic challenge. While I am a business applications developer by day, my hobby/pet-project has been the development of a railroad simulator/"video game". (Check out this series of screen shots.) Most of my endeavor has been very successful. However, where I feel totally defeated is in programming of the brake systems, which deal with the flow of compressed air. I do not believe you need to be an expert in either brake systems or fluid dynamics. You just have to be good at solving algorithms. I can give you enough of a crash course to know what you need regarding trains. Regarding fluid dynamics, one has to remember this is a real-time video game. I don't want to waste lots of CPU power performing excessively accurate calculations. In fact, as long as the desired behavior is achieved, I don't really care how realistic the underlying algorithm is. "What is the 'desired behavior'," you ask? Take a look at this article, which describes in detail what I'm trying to simulate. If you have general questions about what I am asking, please post those publicly on this thread so others can read the responses. However, I have also enabled private responses to this message for those who would like to proceed with this and therefore need to take the discussion outside of this thread. As I said before, this is a pet project. It is not commercially funded. Therefore I do not have resources to pay -- at least not a lot. I might be able to contribute a little something for your time if you come up with the winning algorithm. But primarily you should only take this on if you're in it for the interesting challenge. Based on my experience, it's guaranteed to give you hours of hair-pulling frustration and nightmares in between. Thanks for reading.
Maybe these guys[^] know. Good luck! :-D
-
I apologize in advance if this is the wrong forum for this post. It is definitely algorithm-related, though it may classify just as much as a personal RFP: I am looking for a programmer who is looking for an algorithmic challenge. While I am a business applications developer by day, my hobby/pet-project has been the development of a railroad simulator/"video game". (Check out this series of screen shots.) Most of my endeavor has been very successful. However, where I feel totally defeated is in programming of the brake systems, which deal with the flow of compressed air. I do not believe you need to be an expert in either brake systems or fluid dynamics. You just have to be good at solving algorithms. I can give you enough of a crash course to know what you need regarding trains. Regarding fluid dynamics, one has to remember this is a real-time video game. I don't want to waste lots of CPU power performing excessively accurate calculations. In fact, as long as the desired behavior is achieved, I don't really care how realistic the underlying algorithm is. "What is the 'desired behavior'," you ask? Take a look at this article, which describes in detail what I'm trying to simulate. If you have general questions about what I am asking, please post those publicly on this thread so others can read the responses. However, I have also enabled private responses to this message for those who would like to proceed with this and therefore need to take the discussion outside of this thread. As I said before, this is a pet project. It is not commercially funded. Therefore I do not have resources to pay -- at least not a lot. I might be able to contribute a little something for your time if you come up with the winning algorithm. But primarily you should only take this on if you're in it for the interesting challenge. Based on my experience, it's guaranteed to give you hours of hair-pulling frustration and nightmares in between. Thanks for reading.
Doesn't look much like a game to me. But Choo-Choo!, what are you using to develop the GUI? I'm in to massivly parallel SIMD, OpenCL development, and a but of Directcompute, but there is not much info on the topic yet. Let me look at the parper describing the problem and consult my prinston math book. ~brb
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
-
Doesn't look much like a game to me. But Choo-Choo!, what are you using to develop the GUI? I'm in to massivly parallel SIMD, OpenCL development, and a but of Directcompute, but there is not much info on the topic yet. Let me look at the parper describing the problem and consult my prinston math book. ~brb
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
I have a hard time picking a term to define what this program is. It's not really a "simulation" because it isn't scientifically accurate or complex enough. It's not a "game" because there's no end objective. What probably isn't clear from the screen shots is that you start with a "Tron"-like grid. You model all the landscape yourself. You add the engines and train cars yourself. It's basically a model train layout without space limitations. You're only limited by your computer's specs. But I also come from a disciplined C++ training from before you could get gigs of RAM for pennies. My data structures squeeze the most out of every byte so you don't have to have the worlds greatest gaming computer to get a lot of capacity out of the software. It's very similar to "Trainz" by Auran Games. There are reasons that I went through the trouble to write my own program instead of just using my copy of "Trainz", but I'm not going to bore everyone with that explanation here.
-
I have a hard time picking a term to define what this program is. It's not really a "simulation" because it isn't scientifically accurate or complex enough. It's not a "game" because there's no end objective. What probably isn't clear from the screen shots is that you start with a "Tron"-like grid. You model all the landscape yourself. You add the engines and train cars yourself. It's basically a model train layout without space limitations. You're only limited by your computer's specs. But I also come from a disciplined C++ training from before you could get gigs of RAM for pennies. My data structures squeeze the most out of every byte so you don't have to have the worlds greatest gaming computer to get a lot of capacity out of the software. It's very similar to "Trainz" by Auran Games. There are reasons that I went through the trouble to write my own program instead of just using my copy of "Trainz", but I'm not going to bore everyone with that explanation here.
It's really not an algorithm. It's linear algebra. You need to know the state of the charge in the brake in terms of PSI for n cars. Each car dissipates the correct amount of release to slow down the car, and then starts to recharge the reservoir. This can be event driven to start charging, you have to know the rate at which it recharges. The rest is a set of linear equations to find what the correct amount of release is for the set of cars in the system. There are some good videos at MIT for solving linear equations for computer programs, if you google lineal algebra and click on videos. I think it's a long set, but you should get the core fundamentals in the forest 3 lecture. ~PB
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
-
It's really not an algorithm. It's linear algebra. You need to know the state of the charge in the brake in terms of PSI for n cars. Each car dissipates the correct amount of release to slow down the car, and then starts to recharge the reservoir. This can be event driven to start charging, you have to know the rate at which it recharges. The rest is a set of linear equations to find what the correct amount of release is for the set of cars in the system. There are some good videos at MIT for solving linear equations for computer programs, if you google lineal algebra and click on videos. I think it's a long set, but you should get the core fundamentals in the forest 3 lecture. ~PB
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
You make some good points. I do know the rates of release and recharge and have been able to successfully develop computations when the locomotive is the only control point. However, I run into problems adding to the process the conditions where by air can be released from or added to the main pipe at each individual car valve. There's also the issue of rapid set/release action. From the railroading standpoint it would not be correct to jostle the brake lever rapidly. However, good practice as a programmer is of course to try to anticipate all possible user input. I haven't been able to successfully track the creation and dissipation of pressure waves that would result from a rapid jostling of the brake lever. I'll look up the videos you mentioned. Having fought with this as much as I have, you may well be right that the source of my issues is lack of knowledge in the appropriate mathematics (and/or physics) rather than any inability to develop code.
-
You make some good points. I do know the rates of release and recharge and have been able to successfully develop computations when the locomotive is the only control point. However, I run into problems adding to the process the conditions where by air can be released from or added to the main pipe at each individual car valve. There's also the issue of rapid set/release action. From the railroading standpoint it would not be correct to jostle the brake lever rapidly. However, good practice as a programmer is of course to try to anticipate all possible user input. I haven't been able to successfully track the creation and dissipation of pressure waves that would result from a rapid jostling of the brake lever. I'll look up the videos you mentioned. Having fought with this as much as I have, you may well be right that the source of my issues is lack of knowledge in the appropriate mathematics (and/or physics) rather than any inability to develop code.
You could implement the jostling of the break valve as an event driven interface on a linked list and use a generic func type to adjust the values in the list, the list would contain the ascending and descending pressure values. Once you find the right math....
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
-
You could implement the jostling of the break valve as an event driven interface on a linked list and use a generic func type to adjust the values in the list, the list would contain the ascending and descending pressure values. Once you find the right math....
"Make everything as simple as possible, but not simpler." -- Albert Einstein "It didn't matter to us whether people believed in us. We believed in ourselves. We had the courage to follow our own path." ~~Nvidia's Jen-Hsun Huang
Easier said than done. That's pretty close to the concept I have been working with -- keeping a list of "pressure zones" (sub-divisions of the brake pipe according to how far air can travel in one computation cycle) and trying to do relative comparisons of pressure from zone to zone. But there are a lot of complications that present themselves once you really dig into it.
-
Easier said than done. That's pretty close to the concept I have been working with -- keeping a list of "pressure zones" (sub-divisions of the brake pipe according to how far air can travel in one computation cycle) and trying to do relative comparisons of pressure from zone to zone. But there are a lot of complications that present themselves once you really dig into it.
FWIW: I did not read the article, but from your description it sounds like an "RC ladder network" (example[^] with each Y a capacitor (holding air), and each Z a resistor (preventing "air" to flow from one capacitor to the next). Such networks are pretty simple to simulate in the time-domain. I haven't done it recently, I did hundreds of those some decades ago. ADDED the ref to the book was mainly to the diagram; I am not suggesting one starts calculating transfer functions or Laplace transforms, a simple delta-V over delta-T simulation should do. /ADDED :)
Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, and improve readability.
modified on Sunday, July 25, 2010 6:27 PM
-
I apologize in advance if this is the wrong forum for this post. It is definitely algorithm-related, though it may classify just as much as a personal RFP: I am looking for a programmer who is looking for an algorithmic challenge. While I am a business applications developer by day, my hobby/pet-project has been the development of a railroad simulator/"video game". (Check out this series of screen shots.) Most of my endeavor has been very successful. However, where I feel totally defeated is in programming of the brake systems, which deal with the flow of compressed air. I do not believe you need to be an expert in either brake systems or fluid dynamics. You just have to be good at solving algorithms. I can give you enough of a crash course to know what you need regarding trains. Regarding fluid dynamics, one has to remember this is a real-time video game. I don't want to waste lots of CPU power performing excessively accurate calculations. In fact, as long as the desired behavior is achieved, I don't really care how realistic the underlying algorithm is. "What is the 'desired behavior'," you ask? Take a look at this article, which describes in detail what I'm trying to simulate. If you have general questions about what I am asking, please post those publicly on this thread so others can read the responses. However, I have also enabled private responses to this message for those who would like to proceed with this and therefore need to take the discussion outside of this thread. As I said before, this is a pet project. It is not commercially funded. Therefore I do not have resources to pay -- at least not a lot. I might be able to contribute a little something for your time if you come up with the winning algorithm. But primarily you should only take this on if you're in it for the interesting challenge. Based on my experience, it's guaranteed to give you hours of hair-pulling frustration and nightmares in between. Thanks for reading.
I read the article, very interesting. I think I'll stick to my Allen 10 Wheeler. Dave.