Announcement

Collapse
No announcement yet.

Final (5.3) Tech Dynamics

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • quote:


    I don't understand. The doubling is not subjective at all. It is central to the operation of the whole system. The effect on applications and as helper techs depends on the scaling rule where 10 levels is double the ability.


    "Not subjective" implies an objective standard. Something that can be measured outside a single individual's perception. The fact that it is central does not make it not subjective. Do you have some objective (not subjective) standard that others can apply to check your judgement?

    Please understand that I am not being critical of your model. I am just trying to get standards that I can include in the coding. I have many years of experience with models, and dealing with the situation where "Fred has left, he was the only one who understood what was going on. Does anyone know what he meant by a 'number three reference factor' - he always said it was obvious..."

    A real model has specifications that do not depend on the knowledge of an individual. Can you please define (objectively) the standards for your judgement of "doubling".

    I also feel that your system definitively prevents any future technologies ever being included in the game. On a logarithmic scale they are now at minus infinity.

    Cheers

    [This message has been edited by Gary Thomas (edited April 13, 2001).]

    Comment


    • The thing being measured is the practical use of the technology. If we can make 50 widgets a minute in 1975 and 100 of the same widgets a minute in 2000, then the tech effectiveness has doubled. The Production Process tech has risen by 10 levels.

      Or, if the best archer element in 2000 BC has a power of 5 and the best archer element in 1000 BC has a power of 10, then the tech effectiveness had doubled, assuming the units cost the same amount of production. The Ranged Unit tech has risen by 10.

      Or, if the best water system that we can build in 1000 BC delivers 1000 gallons a minute and the best water system that we can build in 500 BC delivers 2000 gallins a minute, then the Water Systems tech effectiveness has doubled and the tech level has risen by 10.

      Comment


      • This is going to be a (probably stumbling) first shot at how the hookups will work between the technology and economics models. The specific aspect I want to start discussion on here is how to figure out the ideal tech level (T) that the Econ model needs to figure out the productivity in an economic sector like farming or manufacturing (production). I apologize in advance to those of you who aren't really familiar with the economic system. This post may have too much jargon for you to make much sense of it without going back and reading the Econ model.

        I'm going to focus exclusively on the agriculture sector at first, just to keep things simple. I don't want to review the whole production function concept here, so I will just sketch out how the tech level is used. Basically, the tech level T determines the per capita production of food in the agriculture sector. One unit of labor, on one unit of land, with appropriate investment, will produce the tech level T of output. I will just use T from now on, so as not to confuse it with other tech levels in this thread. My main purpose in this post is to generate T using an effectiveness number from the tech model. First I need to give a few more details about T, and its scale within the Econ model.

        So, T has the job of determining how much people know about crop rotation, crop plants, agricultural machines, etc. Actually, T doesn't directly determine the production, there is an effective value of T called A, since knowing about things like agricultural machines doesn't mean you have actually bought the tractor... A includes the effects of actually needing to buy some hardware to derive benefit from the technological knowledge. For the purposes of this post, the difference between A and T is irrelevant, and I will just use T.

        Primitive agriculture has a value of T ~ 4, which is basically subsistence level. A standard population unit on one "site" of farm land will then produce 4 units of food, which is what is needed for basic survival. At subsistence level everyone just produces food, and pretty much nothing else, just to survive. However, by the time you get to a civilization you should have something like T = 5. That gives enough of a food surplus to be able to afford a few specialist types to produce something other than food. At the other end of this scale I want to figure out a crude value of T that would represent modern agriculture. For the modern case I will just use some numbers off the top of my head. I assume that in a modern economy farmers are about 2% of the population, and that they satisfy the modern food needs of the entire population which I take to be something like 5x subsistence. So using these crude numbers modern farmer productivity is approximately 250 x subsistence (5 *50, 50 comes from inverting 2%). So the T scale should go from about 5 for early civilizations, to about 1250 (250x 5) for modern agriculture. Time now to figure out a technology-based effectiveness scale that maps to the numbers the model needs.

        It seems pretty clear we just want to use some sort of weighted sum of the effectiveness of all the technologies and applications that go into agricultural productivity. (Although this certainly could be a more complicated function, possibly including logic, if a weighted sum doesn't produce the right answers) The applications will already produce effectiveness numbers that we can use directly. For the technologies (civs skills like crop plants) we can rely on the general formula that each 10 levels doubles the effectiveness. For technologies that start at zero at the beginning of the game I'll make the assumption that the starting effectiveness should be one. However, for the case where a technology only becomes available partway through the game, I think we need to associate a "starting effectiveness" with it, otherwise each model that uses technologies will have to make their own determinations.

        What exactly did you have in mind for this circumstance Richard?

        I will now use some examples from a previous discussion on this topic to flesh out things a bit and get the discussion of how we should do this to a conclusion soon. I'm going to use a post of Richard's where he had a proposal for what should go into agriculture effectiveness. You can find the original post and a full discussion here near the bottom of the page.

        quote:

        I think that we can compromise on the 4/3 split Mark wrote about. IMO, some of the things you listed should be Level 3 and some should be Level 4.
        The original definitions were that Level 3 techs represented knowledge or skill, while Level 4 applications represented a physical thing. A Level 3 thing has instant, global effects, while a Level 4 thing is constructed as per the economic model. A Level 3 thing is something you do, while a Level 4 thing is something you make.
        I like these definitions. I think that they should be the rule of thumb. Also, remember that there is no way to give arbitrary bonuses to Level 4 applications. To keep things manageable, these should only depend on technology level.
        Based on these definitions, I suggest the following split:
        Level 3 Crop Plants (Agriculture 3, Breeding/Genetics 5)
        Level 3 Crop Rotation (Agriculture 5, Ecology 3)
        These are basically constant over the civ, so they should be Level 3. Exploration would generate free RP's for the Crop Plants tech, which is something you couldn't do if it were an application.
        Level 4 Drainage
        Level 4 Farm Tools [Plows and Early Agricultural Machines] (Agriculture 2, Mechanical Engineering -3% 2, Draft Animals 5, Metallurgy 3% 3) L = 4
        Level 4 Farm Machinery (Agriculture 35% 3, Engines 40% 4, Mechanical Engineering 45% 3, Metallurgy 40% 2) L = 13
        Level 4 Fertilizers and Pesticides
        Level 4 Irrigation (Agriculture 3, Civil Engineering 2, Management 2, Mechanical Engineering 2) L = 2
        These could vary by province; they are things that must be built and maintained. Of course, the player wouldn't direct the building of farm tools themselves, but I think that the level of province infrastructure and its production capacity should have a local effect on these things. A farm's overall effectiveness would depend on all of these techs, but in the case of the Level 4 equipment, the farm's effectiveness can be penalized if the province has bad infrastructure.



        Some of these specs may be slightly out of date, like the level 4 techs don't have any value of G, which is the short term growth parameter in the E equation immediately below. But let's put the details aside for a moment.

        For reference: E= RTL*G + (1+.1*(MV-1)*L) ^ (RTL/GV) when RTL for the application is positive or zero.

        Just to keep things simple let's pretend for a bit that an overall Agriculture tech is the only relevant item for determining T for agriculture. Assuming that Agriculture has an effectiveness of 1 at level 0, and that the level for modern agriculture is approximately 100, we can use the scaling law of a factor of 2 for every 10 levels to determine the modern effectiveness. It would be 2 ^ 10 = 1024. So, some formula like

        T = 3+ Agriculture effectiveness

        Would give approximately the right answer. Specifically, for classical antiquity where the Agriculture level might be 10, T = 3+ 2 = 5 as specified, and for the year 2000, where the Agriculture level might be 100,T = 3+ 1024 = 1027, which is in the vicinity of the 1250 we were looking for.

        So first, does this trivial example meet with everyone's approval as a generally sensible way to go about this given the abstracted example?

        Now we get to the details for what I think could be the real approach. First of all, I will recap Richard's list, stripping out some things we don't need, and adding a few other details. I will drop Drainage from the list, because that gives more sites for agriculture within the model, and the increased sites then contributes to increase productivity. The E = is the starting effectiveness. I just made some guesses for the parameters, and also changed the Irrigation longevity number to be more to my liking.

        Level 3 Crop Plants E = 1
        Level 3 Crop Rotation E = 1
        Level 4 Farm Tools E = 1, L = 4
        Level 4 Farm Machinery E = 10, L = 13
        Level 4 Fertilizers and Pesticides E = 1, L = 10
        Level 4 Irrigation E = 1, L = 5

        One initial problem is that I have both the level 3 technologies having basically the same scale as I used for Agriculture above. I'm not sure you can make a case for much better than a 30-fold increase in either of these. I sense what Richard will want to do is start both of these at 50 in the Stone Age so that when they reach 100 in modern times the effectiveness will only have increased by a factor of 32. I could work with that scale also, but I think it's really silly since the only place crop plant effectiveness is used is in the agriculture sector and its effectiveness will be multiplied by an arbitrary scale factor. So I will leave it as-is in the example, and let Richard comment. It could certainly be done his way with similar although not identical results. What I will do instead is used the 1-1000 scale and then multiply by a small value to get a scale that maxes out in the vicinity of 30.

        From here on, I have edited this post from what I put up around noon today. Most of it is slight modifications and also added content. I also changed the discussion of above in some minor ways to make it clear.

        So here is my first shot at a formula for agricultural effectiveness. In the formula below when I say Crop Plants I mean the effectiveness for that technology or application.

        Agricultural effectiveness = 3 + 0.04* Crop Plants + 0.03 * Crop Rotation
        + 0.25 * Farm Tools + 0.70 * Farm Machinery
        + 0.10 Fertilizers and Pesticides + Irrigation * (Irrigation appropriateness of square/ land)

        I have not yet balanced out this formula to make sure all the numbers come out right. So I'm sure they won't give exactly the answers I'm looking for. But I think the basic idea is clear. But before we worry too much about small details, I'd like to discuss the overall result.

        The way I have a right now I think that the effect of crop plants and crop rotation is too weak before the modern era. It would probably work better if I had an effectiveness that went from about 1 to about 30, and dropped the pre-factors. Then I would just reduce the number 3 at the start of the equation to make up for the larger numbers and a low-tech end. So score one for Richard!

        The farm tools effect will be strong, but not grow that fast because of the longevity factor of 5. I think this is a fairly reasonable result. When farm machinery finally comes along, it will have an enormous importance. And its importance will grow rapidly as technology does because of the longevity factor of 13. There is one problem I have with this high longevity factor. It will work fine for a historical game, but as we go past the modern era, that longevity factor will cause farm machinery to eclipse all other aspects of farming, which doesn't seem right.

        Finally, the irrigation term will have a large effect, especially in early days, but only for certain squares. Squares with good access to water for irrigation, and also where there is not enough rainfall, will derive large benefits when investments in farms are made.

        What does everyone think about this first pass at it?

        [This message has been edited by Mark_Everson (edited April 13, 2001).]
        Project Lead for The Clash of Civilizations
        A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
        Check it out at the Clash Web Site and Forum right here at Apolyton!

        Comment


        • The problem is that agriculture is one of those technologies that doesn't fit within the model rich described (ie every 10 equals double in technology). Lets assume that we start it at Lvl 0.1. which can produce enough food to feed 1 person per year.

          At level 10, it would be it would be enough to feed 2 people, 20 could feed 4...at level 100 its enough to feed 1024 people which is alot, but with genetic engineering and a lot of other new techniques this is no where near what 1 acre can now feed per year.
          Which Love Hina Girl Are You?
          Mitsumi Otohime
          Oh dear! Are you even sure you answered the questions correctly?) Underneath your confused exterior, you hold fast to your certainties and seek to find the truth about the things you don't know. While you may not be brimming with confidence and energy, you are content with who you are and accepting of both your faults and the faults of others. But while those around you love you deep down, they may find your nonchalance somewhat infuriating. Try to put a bit more thought into what you are doing, and be more aware of your surroundings.

          Comment


          • OK, here is a revision of parts of my post above after some thought. Where this post and the one above disagree, take this one's answer.

            LGJ: I don't think your criticisms apply, because I am not using the Raw effectiveness. Because of the way I am combining things, I don't think there are any serious problems.

            I will now follow what Richard would want to do, and start both "level 3" techs at 50 in the Stone Age so that when they reach 100 in modern times the effectiveness will only have increased by a factor of 32. Essentially this just means that the initial effectiveness of 1 increases by a factor of 2 every 20 levels. I have also changed the farm tools number for longevity to make it a little more important.

            Level 3 Crop Plants E = 1
            Level 3 Crop Rotation E = 1
            Level 4 Farm Tools E = 1, L = 6
            Level 4 Farm Machinery E = 10, L = 13
            Level 4 Fertilizers and Pesticides E = 1, L = 10
            Level 4 Irrigation E = 1, L = 5

            I'll now give raw numbers for effectiveness as of these technologies for 4 historical periods. These are Stone Age (s) classical antiquity (A) and the two dates shown. Some of these numbers are just approximate, since some things are difficult to specify at this point.

            Code:
            S  A  1870 2000 Technology/application
            1 1.4  5.6    32     Crop Plants
            1 1.4  5.6    32     Crop Rotation 
            1 1.6  10.5  110   Farm Tools 
            0   0    25    1000 Farm Machinery
            1  2     32    1000 Fertilizers and Pesticides 
            1 1.4  5.6    32     Irrigation
            So here is my new formula for agricultural effectiveness.

            Agricultural effectiveness = 0.7 + Crop Plants + Crop Rotation
            + Farm Tools + 0.8 * Farm Machinery + 0.3 * Fertilizers and Pesticides
            + Irrigation * (Irrigation appropriateness of square/ land)

            Code:
            Agricultural effectiveness by date under two scenarios (no irrigation/irrigation available)
            
            S  A   1870 2000 (no irrigation available)
            4  5.7 51.3  1474
            
            S  A   1870 2000 (irrigation available)
            5  7.1  56.9  1506
            I'm still not completely happy with this version, but I think it's a lot better than the previous one. The things I still don't like our that for classical antiquity I think the effectiveness may be a little bit too high, and for modern farming the effect of irrigation in a desert area will probably be too small. I need to think about the irrigation a little bit. It may be that irrigation should not only increase the tech level, but also increase the effective number of sites. That would solve my biggest problem here. The other part could be fixed by just tweaking the numbers, but I want to hear what others have to say before I bother fine-tuning this

            [This message has been edited by Mark_Everson (edited April 13, 2001).]
            Project Lead for The Clash of Civilizations
            A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
            Check it out at the Clash Web Site and Forum right here at Apolyton!

            Comment


            • Radical idea brought on by the messing around with level 3 skills in the examples above:

              Give every Tech a Longevity number. That way every tech can use a uniform scale for levels with 0 at 5000BC, 100 at y2k. The longevity does all the work when creating an effectiveness from the level for any tech. I guess you'd actually need a starting effectiveness number too for those techs that don't start at the beginning of the game.
              Project Lead for The Clash of Civilizations
              A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
              Check it out at the Clash Web Site and Forum right here at Apolyton!

              Comment


              • Mark, my post that you quoted is so old it dates from before the concept of Civilization Activities. I thought that the new plan was to have these Activity objects translate the tech level into the other game effects. These Activity objects have the responsibility of fetching tech data and averaging it into constants to be output top the other models.

                Since the beginning, there had been a concept called 'knowledge' fit into the tech model. This is the linear scale of skill that doubles with a tech increase of 10. To summarize:

                k = MV((T - Ts)/GV)

                When the tech is first created, k = 1. Ten levels later, it is 2, then ten levels later it is 4, then 8, and so on.

                Each tech associated with a Civilization Activity will thus have a k value associated with it that determines the raw performance of the tech. They also have an ActivityEffect value that determines how important the tech is to that activity.

                The CivilizationActivity can then use a weighted sum to determine the T value. For each associated technology, k is multiplied by the ActivityEffect value. The sum of all of those values is T. For applications, the k value is replaced by the Application Effectiveness Factor, which can still have the same growth pattern, starting at 1.

                So at the start of the game, there will be several technologies with a k value of around 1. These would combined so as to provide the T value of 5. Later, the k values could get up to around 256, assuming that these techs started around level 20. The k values of these original techs, added to the smaller k values of new technologies, will add up to about 1250 if we choose the proper ActivityEffect values.

                Note that what I have derived here is very similar to what Mark came to. In fact, we can probably use those same numbers. The only real difference is that the weighted sum calculations are integrated with the ActivityEffect object.

                quote:

                Radical idea brought on by the messing around with level 3 skills in the examples above:
                Give every Tech a Longevity number. That way every tech can use a uniform scale for levels with 0 at 5000BC, 100 at y2k. The longevity does all the work when creating an effectiveness from the level for any tech. I guess you'd actually need a starting effectiveness number too for those techs that don't start at the beginning of the game.


                What you are talking about is already part of the Application programming. So if we need the functionality you describe, it seems like we can use applications instead of techs. Gary seems to be finished, and I'd hate to change the requirements now. Let's see what we can do with the current system before we change things. I think that all we have to do now is make the CivilizationActivity code, enter good guesses, playtest, and tweak.
                [This message has been edited by Richard Bruns (edited April 13, 2001).]

                Comment


                • quote:

                  Originally posted by Richard Bruns on 04-13-2001 11:04 PM
                  I thought that the new plan was to have these Activity objects translate the tech level into the other game effects. These Activity objects have the responsibility of fetching tech data and averaging it into constants to be output top the other models.


                  Can you show me where this new plan is stated? All I can find in this thread is that what we used to call tags have been changed in name to Activities but still only have the traditional function of channeling RPs into different techs. Your idea is intriguing, but has several obvious issues.

                  1. The previous plan for tags had assumed for tractability a maximum number of something like 20. If you want to use Activities as you stated above, then there will be many more than 20 for the economy model alone. Many production types beyond the 4 major ones need to be supported. Not to mention all the different types of infrastructure, each of which needs its own effectiveness. Are you comfortable with that? What this will mean is we will need to reinstate something like the old 20-tags system for use by the AI and player. Here's an example why... There used to be a tag called Food. When there was a food shortage all the ruler would have to do was put resources into the Food tag. We will now have Activities like Agriculture, Fishing, and Herding that will get their effectiveness from vastly different technologies. The new Food tag would have the job the old one did -- allocating resources when the ruler of a modern economy says "invest this money to give me more food production, I don't care how"

                  2. Because of the different rates at which effectiveness increases for different technologies and applications, it may not be possible to use the same coefficients for RP allocation and also effectiveness determination. I'll use my Agriculture effectiveness formula as an example:

                  Agricultural effectiveness = 0.7 + Crop Plants + Crop Rotation
                  + Farm Tools + 0.8 * Farm Machinery + 0.3 * Fertilizers and Pesticides
                  + Irrigation * (Irrigation appropriateness of square/ land)

                  The effectiveness formula needs a coefficient of 1 or less in front of Farm Machinery or the modern effectiveness would become too large. But, when Farm Machinery "turns on" it pays off much more in effectiveness than the others because of the longevity number of 13. So from the perspective of allocating research points you want FM to have a coefficient higher than the other technologies (in this case 1) to do the right allocations. (And then the RPs would of course be passed on to the techs that go into FM.) It makes no sense in this context to use the effectiveness numbers to generate ActivityEffect values since then in modern times Crop Plants would come out as more important that Farm Machinery using the equation above. That is the Wrong answer! [All this assumes equal RPs produce equal level changes too. This assumption will clearly be false in many cases. That is another asymmetry between RP allocation, which should care about how expensive it is for RPs to produce a level change, and things like Agricultural effectiveness that don't include that effect in any way.]

                  quote:

                  Mark: Give every Tech a Longevity number.
                  Richard: What you are talking about is already part of the Application programming.



                  You are the one who previously said I shouldn't make up lots of applications for things that you consider to be civilization "skills" in the post that I referenced above in the Tech 5.1 thread. You previously maintained that there was a substantial difference between the old level 3 techs and applications, and that we should use the level 3 ones for things that are artifacts that are made. I'm glad to see you relaxing this distinction because I always thought it made life tough on people who had to figure out effectiveness. But remember that there is a lot of overhead involved in having many level 3 technologies being shadowed by Applications.

                  One more try on scaling of tech levels...

                  I think my proposed change to add longevities would require an additional something like 20 lines of code... Unfortunately everyone involved in this exercise seems to think a different way of handling tech levels is intuitive I think my "historical" approach (defined below) will be intuitive for most scenario designers who aren't math jocks. I find your system to be extremely cumbersome to deal with even for me who is mathematically literate. And now Gary has (I think ) a third proposal, where techs should always start at level 0. I think this third one is more straightforward than yours, but still causes problems when one needs to answer that question "what level should technology X be at in 1900?" So I'm going to go ahead and restate my opinion one more time before your idea gets locked into your data entry method. (In other words, once you put in the numbers, and tweak things, basically the decision is made Forever because of lock-in effects. Effectively it would be too much of a pain to go back and do it again a different way. This is why we now have the inefficient Qwerty keyboard on our computers. At one time typewriter manufacturers needed to slow down entry because keys got stuck. Now most of the world uses that keyboard on computers with vastly different technology from typerwriters because of lock-in effects. This is even though the original reason for the choice is long gone, and other keyboard layouts would be much better for present uses.) Based on previous conversations I'm sure I won't change your mind, but I think I have to say once more for the record that I am sure you are going to confuse a helluva lot of people designing scenarios over the years because of your approach.

                  I still believe that a "uniform" scale (uniform historically, not by effectiveness) for technology levels would be vastly easier for scenario designers to use, and players to understand. I realize that you Can go foreword as things are now. My fear is that we will pay for the odd technology levels scale that is intuitive Only to you for the rest of the history of the game. I'm not saying that many people Can't work with your scheme, obviously anyone with a little mathematical sophistication can work backwards from your assumptions to find out what the tech level for a given age should be. But working with the effectiveness formula has made me even more certain that it makes much more sense to have a level scheme where all technologies are the same level +/- 10 or so for a given stage in history. For instance what I had to do with Crop Plants was to think "for 1870s technology, what the heck will the level be for something that starts at 50 at 5000 B.C. and is 100 for year 2000?, oh, probably 75 is right." In the way I would like it to be I could just say 1870s technology ~50 for everything, and just plug straight into the effectiveness formula that every Tech would have in my approach.


                  Putting all this aside for the moment, are there any further comments on my basic formula for effectiveness? Does it seem reasonable? Does the tech system and the effectiveness numbers as outlined so far, allow us to do what we need to do?

                  Also, if we can't use Activites for getting effectivenesses in the way Richard suggests, then we'll need an object to handle Effectiveness for cases beyond simple Applications. Sound right Richard and Gary?

                  [This message has been edited by Mark_Everson (edited April 14, 2001).]
                  Project Lead for The Clash of Civilizations
                  A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
                  Check it out at the Clash Web Site and Forum right here at Apolyton!

                  Comment


                  • My one concern and it could be a big concern down the road, is to things, first the easier of the 2.

                    1> What will be decided for the levels for things we have yet to put to any practical use but may soon such as cybernetics?

                    2> Since the beginning of the Idustrial Age and moreso since the dawn of the Information Age, Technology growth has been speeding up at a very rapid pace. Within the 60 or so years that computers have been around for practical use they have grown at an extrondiary technological rate which is unparrelled in our history. In fact it has come so far spped wise that if a computer is out on market, it is considered obsolete. The problem with this is that although it may easily fit within the year 2000 deal rich has proposed, by the year 2100 it could well be over 200, and shortly after 300. After a while these numbers become more and more meaningless.... "So I'm 450 and my main rival is 520? I can catch him in a few turns."
                    Which Love Hina Girl Are You?
                    Mitsumi Otohime
                    Oh dear! Are you even sure you answered the questions correctly?) Underneath your confused exterior, you hold fast to your certainties and seek to find the truth about the things you don't know. While you may not be brimming with confidence and energy, you are content with who you are and accepting of both your faults and the faults of others. But while those around you love you deep down, they may find your nonchalance somewhat infuriating. Try to put a bit more thought into what you are doing, and be more aware of your surroundings.

                    Comment


                    • Hi LGJ:

                      On 1,do you mean level, or effectiveness?

                      I don't really think your 2 is an issue... If things ever get to the point where you can rip through a large number of levels on average in a turn, it will also be true that because of the awesome technological level things in the world will move very fast. A difference of 70 levels like you are talking about still means an awesomely large difference in effectiveness. That difference is probably equivalent to the difference between contemporary and Renaissance technology. If the one with "only a few turns lead" doesn't like you, I suspect you will be history before you can close the gap. Anyway, if this turns out to be a problem, we can put a design patch on it, but I don't think it will be.
                      Project Lead for The Clash of Civilizations
                      A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
                      Check it out at the Clash Web Site and Forum right here at Apolyton!

                      Comment


                      • I am having quite a bit of trouble finding out how the technology model works. Because there is no concise statement for the operation of the technology model, I have had to guess in some areas. I really do not have the time to be constantly combing back over hundreds of posts trying to extract what is current. ALL of the summaries are either so old as to be useless, or woefully incomplete. It really is time that the summary on the main web page should be brought up to date. In the notes below I have repeated the interface, because it has changed, however slightly (isActive and setActive have been added to technologies for a particular owner). This is one small step toward avoiding the necessity of constant back references to earlier posts.

                        The coding for the technology model is complete, and the testing nearly so. The way it works is as follows:

                        1. Access to the technology system is through the interface. This is listed, in full, below.

                        2. The concept of technology owner is general. Each technology owner has a technology interface, with a complete list of technology levels for that owner. New technology owners can be assigned a new (base level) interface, or a copy of an existing interface.

                        3. Technology interfaces may be split and merged as described in the interface.

                        4. If a technology does not have helpers, it is assumed to be active from the beginning. If it has helpers it becomes active when all of the helpers reach the helper start level (see below).

                        5. Applications, in the present context, are the effect of technology on an application. They determine whether an application is buildable, and can calculate an effectiveness factor. They are buildable when all of the helpers reach the requirement start level (see below). Technologies may be set to active even before they would ordinarily achieve it.

                        6. Activities, in the present context, are used to assign research points among a variety of technologies. At present there is no provison (in the interface) to return any kind of activity effectiveness.

                        7. All three of these primitives have a list of technologies. The lists represent:

                        (a) For technologies, the list of helper technologies
                        (b) For applications, the list of required technologies
                        (c) For activities, the list of recipient technologies (those that get the research points).

                        The entities in these lists will be called, generically, helpers, which must be interpreted as meaning helpers, requirements, or recipients depending on context.

                        8. Each "helper" has the following fields:

                        (a) Start level (not used for activities)
                        (b) Level offset (not used for activities)
                        (c) Effect

                        7. For technologies and applications, the helper effect is calculated by:

                        helper effect =
                        effect * (level - levelOffset) / helperWeight

                        where helperWeight is the global value W. The 100 scaling for levels should be reflected in the value of helperWeight.

                        8. For technologies and applications, the start level is the required level before the technology or application becomes active (technologies) or buildable (application).

                        9. For activities the effect is used to assign research points among technologies. The RAW effect value is used, so the formula is:

                        research points assigned to recipient technology =
                        total research points for the activity * effect

                        The reasoning here is that if the program scaled these effects to add to 1, a constraint is placed on the model. If the modeller wants them to add to 1, then make it so, rather than permanently hard coding it.

                        10. When a technology owner splits, both parts have the same technology interface. Any neighbour list is discarded.

                        11. When technology owners merge, the higher level of technology is assigned to each, and any neighbour list is discarded.

                        12. Diffusion is intended to represent the spread of technological innovation based on observing what one's neighbours do. In earlier times this was a very powerful means of technology spread. The model here is that the new technology level becomes:

                        New level =
                        old level + factor * (neighbour's level - old level)

                        provided the neighbour's level is higher. This effect cannot be achieved by manipulating research points.

                        Since it is not my job to write the specification for the model, I omit the formulae by which research points are transformed into technology levels. You will have to take my word for the fact that they represent the formulae specified in some ancient post or other.

                        From Mark:
                        quote:


                        Give every Tech a Longevity number. That way every tech can use a uniform scale for levels with 0 at 5000BC, 100 at y2k. The longevity does all the work when creating an effectiveness from the level for any tech. I guess you'd actually need a starting effectiveness number too for those techs that don't start at the beginning of the game.


                        This is not well explained. I can "give" technologies anything you like, provided they don't do anything. I can't see how a number "does all the work when creating an effectiveness". Anyway, it is too late for D5, unless you are prepared to accept at least a weeks delay before I get on to the government stuff.

                        The current (as at 16/4/01, 6am) interface is

                        Code:
                        package game.model.tech;
                        
                        /**
                         * Title:        TechnologyActivity
                         * Description:  Technology specific aspects of activities
                         * Copyright     2001, the Clash of Civilizations Development Group
                         *
                         * @author       Gary Thomas and Mark Everson
                         * @version      0.1, Date: March 27, 2001
                         */
                        
                        /**
                         * The general interface for all connections to the technology model.
                         * 
                        
                        
                         * The calls are grouped according to their context.
                         * 
                        
                        
                         * Definition:
                         * [b]owner[/b] or [b]Technology owner[/b]:
                         * any entity (civilization, province, map square, city, scientific genius
                         * character - the Einstein effect) that has a technology level profile.
                         * The system keeps a list of owners, and they can interact.
                         * 
                        
                        
                         * In addition to this interface there are three static calls:
                         * 
                        
                        
                         * Create a new Technology object for a new technology owner:
                        
                         *   TechnologyInterface Technology.newInstance(String owner)
                         * 
                        
                        
                         * Find a Technology object for a technology owner:
                        
                         *   TechnologyInterface Technology.getInstance(String owner)
                         * 
                        
                        
                         * Update the technology levels for all owners:
                        
                         *   void Technology.update()
                         */
                        public interface TechnologyInterface {
                        
                        //---------------------- Affecting the interface itself -------------------
                          /**
                           * Affecting the interface itself, remove this technology.
                           * 
                        
                        
                           * This does not destroy the interface object, it just removes the owner
                           * from the owner's list. To get rid of the object, set it to null.
                           */
                          public void remove();
                        
                        //---------------------------- Other Technology ---------------------------
                          /**
                           * Clone this technology (the owner has split into two parts).
                           * 
                        
                        
                           * The new interface will be a copy of the old one, with all the same
                           * levels
                           * @param newOwner the owner's name for the new interface
                           */
                          public TechnologyInterface copy(String newOwner);
                        
                          /**
                           * Merge this technology (two owners have merged)
                           * 
                        
                        
                           * Note that this does not remove the (now) redundant owner. The technology
                           * levels will, for each technology, be the larger of the two.
                           * @param merging the name of the other owner
                           */
                          public void merge(String merging);
                        
                        //-------------------------- Technology levels ----------------------------
                          /**
                           * Determine whether a technology is active
                           * @param name name of the technology
                           * @return active status
                           */
                          public boolean isActive(String name) {
                            TechnologyLevel level = (TechnologyLevel)get(name);
                            return level.isActive();
                          }
                        
                          /**
                           * Set a technology's active status
                           * @param name name of the technology
                           * @param value set the active status
                           */
                          public void setActive(String name, boolean value) {
                            TechnologyLevel level = (TechnologyLevel)get(name);
                            level.setActive(value);
                          }
                        
                          /**
                           * Get the level of a particular technology for this civilization
                           * @param name name of the technology
                           * @return the current technology level for this technology
                           */
                          public float getLevel(String name);
                        
                          /**
                           * Set the level of a particular technology for this civilization
                           * 
                        
                        
                           * @param name name of the technology
                           * @param level the technology level to be set
                           */
                          public void setLevel(String name, float level);
                        
                        //----------------------------- Applications ------------------------------
                          /**
                           * Application, method to determine whether an application is buildable
                           * 
                        
                        
                           * @param name name of the application
                           * @return true if the application can be built
                           */
                          public boolean isBuildable(String name);
                        
                          /**
                           * Application, get the effect of an application from its name
                           * @param name name of the application
                           * @return the effect of technology on the application
                           */
                          public float getEffect(String name);
                        
                        //-------------------------- Research effects ----------------------------
                          /**
                           * Set the research effect related to an activity
                           * 
                        
                        
                           * @param activityData the activity data
                           */
                          public void addToResearch(String name, float value);
                        
                        //--------------------------- Diffusion -----------------------------------
                          /**
                           * Set diffusion from neighbour
                           * @param neighbour name of neighbour
                           * @param effect the effect (0.0 - 1.0) of the diffusion
                           */
                          public void setDiffusionFrom(String neighbour, float effect);
                        
                          /**
                           * Set diffusion from neighbour
                           * @param neighbour TechnologyInterface of neighbour
                           * @param effect the effect (0.0 - 1.0) of the diffusion
                           */
                          public void setDiffusionFrom(TechnologyInterface neighbour, float level);
                        
                        }
                        [This message has been edited by Gary Thomas (edited April 15, 2001).]

                        Comment


                        • In the lack of an architecture thread, I will post these code architecture notes here. I intend to use the same architecture on the government and social models.

                          The whole structure of the technology model revolves around named things - technologies, applications, activities (and owners, which I added later).

                          Accordingly I created a NamedObject class. In order to generalize the concept, I created a NamedObjectInterface which the NamedObject class implements.

                          All of these named objects exist in various lists. So, I created the NamedObjectList class. This is the guts of the system. A NamedObjectList implements:

                          1. NamedObjectInterface, so we can have named lists of named lists.

                          2. Cloneable, for copying.

                          3. The SortedMap interface, for searching.

                          4. To large extent, though not completely, the List interface. It was not possible to completely implement the List interface because it conflicts with the SortedMap interface (same method with different return types, for example). Where a conflict arose, the SortedMap interface was preferred.

                          A named object list extends AbstractListModel, and implements the remaining parts of the ListModel interface, so that

                          1. It has the listener handling facilities provided by the AbstractListModel class.

                          2. For what it is worth, it is serializable.

                          3. It is an implementation of ListModel, and hence can be passed directly to JList or its derivatives.

                          The effect of this last is that any changes to the list will be, automatically, reflected in the JList. (For non-coders, a JList is the Swing component that provides a list of selectable choices on the screen.)

                          The tech model itself consists of four instances of NamedObjectList, held as static members in a class called Lists. The actual lists are:

                          1. the technologies list, a list of TechnologyData objects, each of which holds the reference (non-changing) data for a technology, including the parameters and helper list.

                          2. the applications list, a list of ApplicationData objects, each of which holds the reference (non-changing) data for the technology end of an application, including the parameters and requirements list.

                          3. the activities list, a list of ActivityData objects, each of which holds the reference (non-changing) data for the technology end of an application, there are no parameters, but there is a recipient list.

                          4. the owners lists, a list of TechnologyInterfaces, implemented as Technology objects, each of which contains a list of TechnologyLevels.

                          Clearly, the contents of these four lists are all themselves lists (of helpers, requirements, recipients, or technology levels).

                          Three of these sub-lists (technologies, appliactions and activities) contain named objects of a single class, the HelperTechnology class. The meaning of the parameters of a HelperTechnology objects varies according to the use of the main list.

                          The owners sub-list contains TechnologyLevel objects which specify the current technology level, whether the technology is active, and the current accumulation of research points for a single technology for a single owner.

                          The structure of the NamedObjectList makes accessing and manipulating these lists quite straightforward. It also extends very readily to Religions, EthnicGroups, Cities, Governments, whatever.

                          The above architecture is supported by:

                          1. A GUI library of various convenient combinations of Swing components.

                          2. An XML library base on SAX and using the Apache xerces.jar library. It is my intention (as noted in other posts) to extract the needed (small) part of this required for our (and other) purposes, when I get the time.

                          3. A data editor which enables creation of an XML file containing the technologies, applications, and activities lists. It draws heavily on the JList features of the NamedObjectList class.

                          The package structure is:

                          game.model.tech
                          game.model.tech.test
                          dataeditor
                          dataeditor.test
                          libraries.general
                          libraries.general.test
                          libraries.gui
                          libraries.gui.test
                          libraries.xml
                          libraries.xml.test

                          all based on a root directory of clash/ClashD5

                          I have to admit the "tech" grates. Years of disasters with abbreviations have taught me to NEVER use them. At best you have to wonder "did I abbreviate this? or didn't I? and I wonder which abbreviation I used? Is it nr? no? num? nmbr?". See "Java Coding Style", a great, if tiny, book and a life-saver.

                          I use JBuilder4 for my coding. Although I have the Enterprise edition, the Foundation edition does very well. The only real lack is the help files. If anyone wants to use JBuilder and feels this is a limitation, please contact me directly.

                          My code, when tested and released (to Mark) will have test classes and JBuilder project files (.jpx files, which are in XML format).

                          Cheers

                          Comment


                          • Hi Gary:

                            Great job! Sorry you had to do significantly more digging for things than ideal with this job. And we really appreciate the effort. I skimmed everything, and the only thing that looked odd to me was item 7 in the first post. But just because I didn't understand it doesn't mean it's wrong...

                            If you would like to start a generic architecture thread for stuff like NamedObjectList I think it's a great idea. Would "Architecture Tools" be a reasonable name for such a thread? The next time I refactor the economics model I will consider upgrading to use your stuff.

                            quote:

                            Originally posted by Mark_Everson on 04-13-2001 10:03 PM
                            Radical idea brought on by the messing around with level 3 skills in the examples above:

                            Give every Tech a Longevity number. That way every tech can use a uniform scale for levels with 0 at 5000BC, 100 at y2k. The longevity does all the work when creating an effectiveness from the level for any tech. I guess you'd actually need a starting effectiveness number too for those techs that don't start at the beginning of the game.


                            I will try to summarize what I was trying to get at in the quote above...

                            Currently other models have need for information from the technology model that gives the effectiveness of a particular part of the model, for instance agricultural productivity achievable at a given level of technology. In that case what I needed to do was create a function that combines an effectiveness from a variety of relevant applications and technologies. Right now, applications provide a way for a different model to get effectiveness information immediately on something like farm machinery by using getEffect. However, there is no supported way to get the effectiveness of a technology that isn't an application. (To see the case where you might need it, you can look at my first post from April 13) So the end-user has to put together an effectiveness for each technology based on parameters like the current technology level, the starting level, and the scaling laws that relate knowledge to change in technology level. This functionality should be in the technology model. That's the short version of what I was trying to say. But I was also trying to run with that thought further...

                            The current scaling in the model assumes:
                            1. all tech levels are 100 in the year 2000
                            2. tech levels for other cases are based on a knowledge/effectiveness scale where losing a factor of 2 in the effectiveness is indicated by a reduction in level by 10 points. (The 2 and 10 in this sentence actually represent scaling parameters whose value we expect might be close to 2 and 10)

                            These assumptions result in a system where one has to be intimately familiar with the technologies to answer a question like what would the level be in the Crop Rotation technology in 1650? This is the type of question I needed to consider when seeing if the formula for Agricultural effectiveness made sense. I believe questions like this will be an endless hassle for using technology information in the economy model, and probably others. The fix that I was suggesting was that we go to a scale where Every technology (if it existed at that time) was close to level 1 in 5000 B.C. or whenever, and close to level 100 in 2000. Under this scenario the question "what approximate level is x technology in 1650?" Is a no-brainer since Every technology will have approximately the same level in 1650, whatever that number may be.

                            The objection raised when I had brought up this possibility before, was that all technologies do not move in lockstep increasing in effectiveness by a factor 1000 over this timespan. However, if we were to put an appropriate Longevity value on all technologies similar to what is done for applications, then we could use a uniform level scale with historical time, and still have the effectiveness change at whatever rate was historically appropriate for the given technology.

                            So those are the two points I was trying to make with that cryptic bit written in "insider language". Hopefully I have to said enough here for you to see generally what I'm talking about. I now regret having not made a bigger deal of this overall issue before, but seeing as you are basically done with a model, I'll just drop it, and deal with the system as it is. Also, as Richard pointed out, one can just have an application "shadow" a given technology, and produce and effectiveness for the technology that way. This eliminates at least part of my problem with current functionality. We can see later if I'm being farsighted, or just a pain in the a** .
                            Project Lead for The Clash of Civilizations
                            A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
                            Check it out at the Clash Web Site and Forum right here at Apolyton!

                            Comment


                            • quote:


                              On 1,do you mean level, or effectiveness?


                              I'll give an example because I am unsure what you mean exactly.

                              I know what and how to use cybernetics for some reason, but it is still in the development stage and therefore still not shown on the list for technologies. Once I can use it, it is shown. There are really several problems with this if the level starts out at anything other than some standard used by all technologies (whether it be 1 or 56)

                              1> If it starts at say 10, then if for some reason it dropped to what would be 9, I should no longer be able to use it because its below the minimum when it was needed to start. At the same time, I have people who know how to use it and even if i don't as a human player I will tweak the inputs so that I can atleast regain that 1 point of technology so I can use it again, even at a minimal level because its better than not at all.

                              If I still can use it at level 9 then it defeats the original purpose of waiting till i reach level 10 because the player will try to achieve that level 10 and then slack off if he has more pressing matters because he now knows he's safe from loosing it.

                              2> I know that you Mark personally don't care too much for this, but for technologies that are possible further down the road it becomes increasingly difficult to assign numbers (based on the level 100=Dec.31,2000) because of what I listed about the increasing rapidicity of technological growth as well as the fact of unpredicatability do to changes in the mindset of a given populous (FE were we to make a game without any forknownledge of the impact of the Crusades on Europe, we would not forsee the sudden increase in the explosion of growth in technology).
                              Which Love Hina Girl Are You?
                              Mitsumi Otohime
                              Oh dear! Are you even sure you answered the questions correctly?) Underneath your confused exterior, you hold fast to your certainties and seek to find the truth about the things you don't know. While you may not be brimming with confidence and energy, you are content with who you are and accepting of both your faults and the faults of others. But while those around you love you deep down, they may find your nonchalance somewhat infuriating. Try to put a bit more thought into what you are doing, and be more aware of your surroundings.

                              Comment


                              • Hi LGJ:

                                Dropping below the start level (your No. 1) is not a problem doing the progression of historical technology levels my way, since every technology will have a start level (it will be zero for lots of them). But I don't understand why having every technology start at 1 solves your issue. If the level drops below one, then you to get into the same scenario that you have here. If it will make you happy we could just define that once you achieve the technology you can't lose it (go below the start level). That's essentially what you are doing if you start every technology at level one and don't let the level ever fall below 1. But personally I think that's going a bit far.

                                Assigning numerical levels for far-future technologies is the least of our problems IMO. By selecting prerequisite techs for when attributes turn on you are effectively picking a date when it starts anyway! It's just hidden in all these opaque numbers in the current system! Do you really think someone is going to fault you for having the plasma rifle technology start with a level typical of 2050 vs. 2200 vs. 2400? If that is the worst-case example for using a uniform historical scale for levels, it seems not much of a penalty at all to me.
                                Project Lead for The Clash of Civilizations
                                A Unique civ-like game that will feature low micromanagement, great AI, and a Detailed Government model including internal power struggles. Demo 8 available Now! (go to D8 thread at top of forum).
                                Check it out at the Clash Web Site and Forum right here at Apolyton!

                                Comment

                                Working...
                                X