home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG033.ARK / CASPPLUS.BAS < prev    next >
BASIC Source File  |  1984-04-29  |  14KB  |  246 lines

  1. REM   THIS IS THE PROGRAM 'CASPPLUS.BAS' (COMPUTER-AIDED SEARCH PLANNING)
  2. REM
  3. REM        BASED UPON THE FORTRAN PROGRAM 'RJCASP'
  4. REM   WRITTEN BY LT.COL. BOB MATTSON USAF, DIR OF SAR, CIVIL AIR PATROL
  5. REM   TRANSLATED FROM FORTRAN TO BASIC BY CAPT GARY WILSON CAP
  6. REM   POD ENHANCEMENTS AND REWRITE IN BASIC-E BY MAJOR BOB GREGORY CAP
  7. REM   LT.COL.MATTSON WORK PH(205)293-5310  ;MAJOR GREGORY HOME PH(717)243-3979
  8. REM
  9. REM
  10. REM  D( )=INTERNAL CELL NUMBER USED FOR SORTING
  11. REM  CELLP$( )=CELL/GRID PRIMARY NAME
  12. REM  COVF( )=CUMULATIVE COVERAGE FACTOR FOR EACH CELL
  13. REM  CELLS$( )=CELL/GRID SECONDARY NAME
  14. REM  CID$( ),CPOD( )=TWO VARIABLES USED TO STORE INPUTTED POD DATA
  15. REM  POTI( )=INITIAL CELL PROBABILITY OF TARGET
  16. REM  POT( )=CURRENT CALCULATED CELL/GRID PROBABILITY OF TARGET
  17. REM  SPOTI=SUM OF ALL CELL POTI( )'S, USED FOR SCALING DOWN POTI'S
  18. REM  POF( )=PROBABILITY THAT TARGET WAS IN CELL BUT IT WAS NOT DETECTED
  19. REM  TPOF=TOTAL PROBABILITY OF FAILURE=SUM OF POF( )'S
  20. REM  POS( )=PROBABILITY OF SUCCESS FOR A CELL=POD( )*POT( )
  21. REM  POD( )=PROBABILITY OF DETECTION FOR A CELL=1-EXP(-SUM(COVF( )))
  22. REM  NPOD=NUMBER OF POD'S LOGGED INTO THE PROGRAM
  23. REM  MX=MAXIMUM NUMBER OF CELLS/GRIDS (IE 50)
  24. REM  MAX=MAXIMUM NUMBER OF POD'S/SORTIES (IE 200)
  25. REM  IPOD=USER INPUTTED PROBABILITY OF DETECTION (POD) FOR A CELL (0%-99%)
  26. REM  IPOT=USER INPUTTED PROBABILITY OF TARGET (POT) BEING IN THIS CELL/GRID 
  27. REM  NUM=NUMBER OF CELLS LOGGED INTO THE PROGRAM
  28. REM  CAT=TERRAIN CATEGORY IE. 1,2,3, OR 4
  29. REM  V=SEARCH TERRAIN VISIBILITY
  30. REM  S,TRACK.SPACING=SEARCH A/C TRACK SPACING
  31. REM  HRS,MIN=HRS,MIN
  32. REM  EST.TIME=ESTIMATED TIME TO SEARCH 'AREA' AT 'SPEED'
  33. REM  GRID.AREA=SIZE OF GRID/CELL IN SQ. NM
  34. REM  PERCENT=PERCENT OF GRID/CELL SEARCHED (0-100%)
  35. REM  AREA=ACTUAL AREA SEARCHED IN SQ. NM
  36. REM  A,A1,A2,A3,A4,A5=SEARCH ALTITUDE AND EQUATION CONSTANTS
  37. REM  K$,K1$,I,J,K,L=TEMPORY VARIABLES
  38. REM****************************************************************************
  39. SPOTI=99:MX=50:MAX=200          REM SET INITIAL EVALUATION OF POT SCALE FOR CELLS
  40. GRID.AREA=172                          REM SET INITIAL GRID SIZE
  41. DIM D(MX),CELLP$(MX),COVF(MX),CELLS$(MX),POTI(MX),POT(MX),CID$(MAX),CPOD(MAX)
  42. REM****************************************************************************
  43. REM THE COMMAND MENUE ROUTINE**************************************************
  44. REM
  45.    PRINT "THIS IS 'CASPPLUS' A SAR RESOURCE ALLOCATION PROGRAM":PRINT:PRINT
  46.    PRINT "BEFORE ENTERING DATA INTO THIS PROGRAM THE USER MUST FIRST ANALYZE"
  47.    PRINT "THE CURRENT SAR SITUATION AND THEN SUBDIVIDE THE SEARCH MAP INTO"
  48.    PRINT "SEARCH CELLS (AS MANY AS 50 CELLS)"
  49.    PRINT "THEN THE USER MUST ASSIGN TO EACH CELL AN INITIAL PROBABILITY THAT"
  50.    PRINT "THE TARGET IS WITHIN THAT CELL. THESE ESTIMATES MAY BE CHANGED"
  51.    PRINT "LATER AND NEW CELLS MAY BE ADDED AT ANY TIME"
  52.    PRINT:PRINT "YOU WILL NOW BE ASKED TO ENTER THESE ESTIMATES"
  53.    GOSUB 45                     REM GET INITIAL CELL/GRID NAMES AND POT'S
  54. 15 PRINT:PRINT "THE FOLLOWING COMMANDS ARE AVAILABLE:":PRINT
  55.    PRINT TAB(10);"1.ADD A NEW CELL/GRID OR CHANGE 'POT' FOR EXISTING CELL"
  56.    PRINT TAB(10);"2.ADD A NEW POD FOR AN EXISTING CELL"
  57.    PRINT TAB(10);"3.LIST THE CURRENT TABULAR SUMMARY OF CELLS"
  58.    PRINT TAB(10);"4.LIST ALL CELLS/POD'S THAT HAVE BEEN ENTERED"
  59.    PRINT TAB(10);"5.DELETE AN INCORRECTLY ENTERED POD"
  60.    PRINT TAB(10);"6.QUIT THE PROGRAM AND DISCARD ALL DATA"
  61. 25 PRINT:INPUT "WHAT IS THE COMMAND NUMBER (1 TO 6) PLEASE";K:PRINT
  62.    IF K<1 OR K>6 OR K<>INT(K) THEN GOTO 25
  63.    IF K=6 THEN STOP                REM END OF PROGRAM
  64.    ON K GOSUB 44,240,470,600,300
  65.    GOTO 15
  66. REM****************************************************************************
  67. REM CELL ADDITION AND PROBABILITY OF TARGET (POT) ROUTINE**********************
  68. 44 FOR I=1 TO NUM:POTI(I)=SPOTI*POTI(I):NEXT I           REM SCALE UP POTI'S
  69. 45 IF NUM>=MX THEN PRINT "NO MORE CELLS ALLOWED":GOTO 185         REM CHG MX
  70.    PRINT "ENTER PRIMARY CELL NAME,COMMA,SECONDARY CELL NAME,COMMA,AND THEN"
  71.    PRINT "THE PROBABILITY OF THE TARGET IN THE CELL USING THE RANGE 0-";SPOTI
  72.    PRINT "FOR THE LAST ENTRY USE 'END,0,0'"
  73. 60 INPUT K$,K1$,IPOT                      REM ENTER P-NAME,S-NAME,CELL POT
  74.    FOR I=1 TO NUM
  75.      IF K$="END" THEN SPOTI=0:GOTO 180            REM EXIT TO DELPHI ROUTINE
  76.      IF K$=CELLP$(I) THEN POTI(I)=POTI(I)+IPOT:PRINT"CELL FOUND":GOTO 60
  77.    NEXT I
  78.    PRINT "THE NEW CELL IS '";K$;"' AND THE POT=";IPOT;"%"      REM ADD NEW CELL
  79.    NUM=NUM+1:CELLP$(NUM)=K$:CELLS$(NUM)=K1$:POTI(NUM)=IPOT:D(NUM)=NUM
  80.    IF NUM<=MX THEN GOTO 60 ELSE PRINT "NO MORE CELLS ALLOWED"   REM DELPHI NEXT
  81. REM****************************************************************************
  82. REM DELPHI EVALUTATION AND SCALING ROUTINE*************************************
  83. REM
  84. 180 FOR I=1 TO NUM:SPOTI=SPOTI+POTI(I):NEXT I            REM ADD UP POTI FOR CELLS
  85. 185 FOR I=1 TO NUM:POTI(I)=POTI(I)/SPOTI:NEXT I   REM SCALE DOWN POTI FOR CELLS
  86.     GOTO 280                          REM GENERATE POT( ) AND SORT
  87. REM***************************************************************************
  88. REM PROBABILITY OF DETECTION INPUT ROUTINE*************************************
  89. REM
  90. 240 IF NPOD>=MAX THEN PRINT "NO MORE POD'S ALLOWED":RETURN
  91.     PRINT "THESE ARE THE CURRENT VALID PRIMARY CELL NAMES: ";
  92.     FOR I=1 TO NUM:PRINT CELLP$(I);", ";:NEXT I:PRINT
  93.     INPUT "TYPE THE PRIMARY CELL NAME OR ELSE 'END' FOR THE LAST ENTRY";K$
  94.     IF K$="END" THEN GOTO 280              REM CALC NEW POT( )'S
  95.     FOR K=1 TO NUM                          REM FOR ALL CELLS
  96.     IF K$=CELLP$(K) THEN PRINT "CELL FOUND":GOTO 250
  97.     NEXT K
  98.     PRINT "'";K$;"' IS NOT A LEGITIMATE CELL NAME":GOTO 240
  99. 250 INPUT "DO YOU NEED HELP IN CALCULATING THE POD (Y/N)";K1$
  100.     IF LEFT$(K1$,1)="Y" THEN GOSUB 800:GOTO 270
  101. 260 PRINT "WHAT IS THE POD FOR THE CELL ";K$;:INPUT IPOD        REM GET POD
  102.         IF IPOD<0 OR IPOD>=100 THEN PRINT "INVALID POD":GOTO 260      REM AGAIN
  103. 270 COVF(K)=COVF(K)+LOG(1-IPOD/100):NPOD=NPOD+1:CPOD(NPOD)=IPOD:CID$(NPOD)=K$
  104.     GOTO 240                              REM GET MORE DATA
  105. REM****************************************************************************
  106. REM ROUTINE TO CALCULATE POT( ) AND THEN SORT ON POT **************************
  107. REM
  108. 280 TPOF=0              REM ENTRANCE POINT FROM BOTH DELPHI AND POD ROUTINES
  109.     FOR I=1 TO NUM:TPOF=TPOF+POTI(I)*EXP(COVF(I)):NEXT I      REM ADD POF'S
  110.     FOR I=1 TO NUM:POT(I)=POTI(I)*EXP(COVF(I))/TPOF:NEXT I       REM CALC POT'S
  111.     FOR J=1 TO NUM-1                         REM SORT ALL CELL DATA ON POT
  112.      FOR I=J+1 TO NUM
  113.        IF POT(D(J))<POT(D(I)) THEN K=D(J):D(J)=D(I):D(I)=K      REM BUBBLE SORT
  114.      NEXT I
  115.     NEXT J
  116. RETURN
  117. REM****************************************************************************
  118. REM POD CORRECTION ROUTINE*****************************************************
  119. REM
  120. 300 GOSUB 600                   REM GET LIST OF PREVIOUS POD ENTRIES
  121. 310 INPUT "WHICH CELL HAS THE INCORRECT POD";K$
  122.     FOR K=1 TO NUM                   REM GET INDEX # OF CELL NAME
  123.     IF K$=CELLP$(K) THEN PRINT "CELL FOUND":GOTO 320
  124.     NEXT K                    REM NORMAL EXIT THEREFORE NOT FOUND
  125.     PRINT "CELL '";K$;"' IS NOT A LEGITIMATE NAME":GOTO 310
  126. 320 PRINT "THE AREA '";K$;"' HAS HAD THE FOLLOWING POD'S ENTERED: ";
  127.     FOR J=1 TO NPOD                        REM FOR ALL ENTRIES
  128.     IF K$=CID$(J) THEN PRINT CPOD(J);"%, ";
  129.     NEXT J:PRINT
  130. 340 INPUT "ENTER THE INCORRECT POD (OR '0' IF NONE ARE INCORRECT)";IPOD
  131.     IPOD=ABS(IPOD)                         REM IPOD MUST BE +
  132.     IF IPOD>=100 THEN PRINT "QUIT PLAYING AROUND":GOTO 340
  133.     COVF(K)=COVF(K)-LOG(1-IPOD/100):NPOD=NPOD+1:CPOD(NPOD)=-IPOD:CID$(NPOD)=K$
  134.     IF COVF(K)>0 THEN COVF(K)=0                      REM DATA TRAP
  135.     GOTO 280                          REM RECALCULATE POD'S
  136. REM****************************************************************************
  137. REM P-NAME,S-NAME,POT,POD,POT OUTPUT ROUTINE***********************************
  138. REM
  139. 470 PRINT NUM;"CELLS/GRIDS ARE ACTIVE ";
  140.     INPUT "HOW MANY CELLS YOU WISH TO SEE TABULATED";J
  141.     IF J<0 OR J>NUM OR J<>INT(J) THEN PRINT "INVALID NUMBER":GOTO 470
  142.     PRINT "CELL","CELL","INIT PROB", "CUMULATIVE","CURRENT PROB"
  143.     PRINT "NUMBER", "NAME","TGT IN CELL","POD","TARGET IN CELL"
  144.     FOR I=1 TO J              REM OUTPUT TABLE OF J CELLS SORTED ON POT
  145.      PRINT CELLP$(D(I)),CELLS$(D(I)),INT(100*POTI(D(I))+.5);"%",
  146.      PRINT INT(100*(1-EXP(COVF(D(I))))+.5);"%",INT(1000*POT(D(I))+.5)/10;"%"
  147.     NEXT I
  148.     PRINT "SEARCH EFFECTIVENESS PROBABILITY =";INT(1000*(1-TPOF)+.5)/10;"%"
  149.     INPUT "ENTER LETTER 'C' TO RETURN TO COMMAND MENUE";K$
  150. RETURN
  151. REM****************************************************************************
  152. REM ROUTINE FOR LISTING ALL CELL/POD ENTRIES **********************************
  153. REM
  154. 600 FOR I=1 TO NPOD:PRINT I;". ";
  155. PRINT"CELL/GRID '";CID$(I);"' WAS SEARCHED WITH A REPORTED POD OF ";CPOD(I);"%"
  156.     NEXT I
  157. RETURN
  158. REM****************************************************************************
  159. REM POD ANALYSIS ROUTINE FOR AIRCRAFT VISUAL SEARCHES *************************
  160. REM
  161. 800 PRINT "DESCRIBE THE TERRAIN TO BE SEARCHED USING THE FOLLOWING CATEGORIES:"
  162.     PRINT TAB(10);"1.OPEN AND FLAT";TAB(40);"2.MODERATE TREE+BUSH COVER"
  163.     PRINT TAB(10);"3.HEAVY TIMBER";TAB(40);"4.ROCKY,MOUNTAINOUS OR NEW SNOW"
  164. 810 INPUT "WHAT IS THE TERRAIN CATEGORY NUMBER";CAT
  165.     IF CAT=1 THEN T=1  :GOTO 815                REM TERRAIN FACTORS
  166.     IF CAT=2 THEN T=.5 :GOTO 815
  167.     IF CAT=3 THEN T=.25:GOTO 815
  168.     IF CAT=4 THEN T=.15:GOTO 815
  169.     GOTO 810                           REM NO MATCH
  170. 815 PRINT:INPUT "WHAT WAS THE SEARCH AREA VISIBILITY (1-5NM)";V
  171.     IF V<1 OR V>5 THEN PRINT "VISIBILITY MUST BE BETWEEN 1 AND 5 NM":GOTO 815
  172. 820 INPUT "WHAT WAS THE SEARCH ALTITUDE (200,300,500,700,1000 FT)";SA
  173.     RESTORE:FOR I=1 TO 5:READ A,A1,A2,A3,A4,A5     REM EQUATION CONSTANTS
  174.     IF A=SA THEN GOTO 830
  175.     NEXT I
  176.     PRINT "PLEASE SELECT ONE OF THE LISTED ALTITUDES":GOTO 820         REM DOPE
  177. 830 INPUT "DO YOU NEED HELP IN CALCULATING THE TRACK SPACING (Y/N)";K1$
  178.     IF LEFT$(K1$,1)="Y" THEN GOSUB 900:GOTO 840             REM SUBROUTINE
  179. 835 INPUT "WHAT WAS THE TRACK SPACING (NM)";S
  180. 840 IF S<=0 OR S>5 THEN PRINT "LETS BE REASONABLE":GOTO 835      REM DATA TRAP
  181.     IPOD=100*(1-EXP(-T/S*(A1+V*(A2+V*(A3+V*(A4+V*A5))))))       REM CALC POD
  182.     PRINT "THE POD FOR AREA '";K$;"' IS ";INT(10*IPOD+.5)/10;"%"     REM OUTPUT
  183. RETURN                        REM RETURN TO POD INPUT ROUTINE
  184. REM****************************************************************************
  185. REM TRACK SPACING ANALYSIS ROUTINE FOR AIRCRAFT VISUAL SEARCHES ***************
  186. REM
  187. 900 PRINT "THE AREA OF THE LAST REPORTED CELL/GRID WAS ";GRID.AREA;"SQ NM"
  188.     INPUT "DID YOU SEARCH THE SAME SIZE CELL THIS TIME (Y/N)";K1$
  189.     IF LEFT$(K1$,1)="Y" THEN GOTO 920
  190.     INPUT "WHAT WAS THE AREA OF THIS CELL IN SQ NM";GRID.AREA
  191. 920 INPUT "WHAT PERCENTAGE OF THIS CELL WAS SEARCHED (0-100)";PERCENT
  192.     AREA=GRID.AREA*PERCENT/100
  193.     PRINT"SO ABOUT ";AREA;"SQ NM WAS SEARCHED.";:INPUT"IS THAT RIGHT (Y/N)";K1$
  194.     IF LEFT$(K1$,1)<>"Y" THEN GOTO 900
  195.     INPUT "WHAT WAS THE AIRCRAFT SEARCH SPEED";SPEED
  196.     PRINT "WHAT WAS THE TIME SPENT IN THE SEARCH AREA?";
  197.     INPUT "ENTER 'HOURS,COMMA,MINUTES'";HRS,MIN
  198.     SEARCH.TIME=HRS+MIN/60
  199. 950 TRACK.SPACING=(60*AREA+SPEED*SQR(AREA))/(SEARCH.TIME*SPEED*60)
  200.     PRINT "I ESTIMATE TRACK SPACING TO BE ";INT(10*TRACK.SPACING+.5)/10;"NM"
  201.     INPUT "IS THAT SPACING ABOUT RIGHT (Y/N)";K1$
  202.     IF LEFT$(K1$,1)="Y" THEN S=TRACK.SPACING:RETURN
  203.     INPUT "WHAT WAS THE TRACK SPACING THEN (NM)";TRACK.SPACING
  204.     EST.TIME=(60*AREA+SPEED*SQR(AREA))/(SPEED*TRACK.SPACING*60)
  205.     PRINT "TO SEARCH A CELL OF ";AREA;"SQ NM AT ";SPEED;"KNOTS WOULD TAKE ";\
  206.     INT(EST.TIME);"HRS AND ";INT(60*(EST.TIME-INT(EST.TIME)));"MINUTES"
  207.     INPUT "DO YOU STILL WANT TO USE YOUR ESTIMATE (Y/N)";K1$
  208.     IF LEFT$(K1$,1)<>"Y" THEN GOTO 950 ELSE S=TRACK.SPACING:RETURN
  209. REM****************************************************************************
  210. REM ***************************************************************************
  211. REM DATA FOR POD EQUATIONS:
  212. DATA 200,-3.438060E-2,.2050731,-1.006933E-2,-5.605945E-4,-6.269870E-5
  213. DATA 300,.4948905,-.7147783,.535268,-.12496,9.579662E-3
  214. DATA 500,.6070413,-.924985,.7044575,-.1699153,1.340136E-2
  215. DATA 700,.7330137,-1.134626,.8355327,-.1996037,1.568362E-2
  216. DATA 1000,.4649629,-.5862799,.4975626,-.1146642,8.416611E-3
  217. REM
  218. END   REM THATS ALL FOLKS *****************************************************
  219. DEFINITIONS:
  220.     PROBABILITY OF DETECTION(POD)=THE PROBABILITY THAT, IF A TARGET IS IN A
  221.         GIVEN CELL/GRID, IT WILL BE FOUND
  222.     PROBABILITY OF TARGET(POT)=THE PROBABILITY THAT THE TARGET WILL BE
  223.         PRESENT IN A GIVEN CELL/GRID
  224.     PROBABILITY OF SUCCESS(POS)=THE PROBABILITY THAT A TARGET WILL BE
  225.         PRESENT A CELL, AND IT WILL BE FOUND
  226.     PROBABILITY OF FAILURE(POF)=THE PROBABILITY THAT A TARGET WAS ACTUALLY
  227.         IN A GIVEN CELL, BUT IT WAS NOT FOUND DURING THE SEARCH
  228.     TOTAL CELL PROBABILITY OF FAILURE=NOT(POT( ))+POF( )=1-POS( )
  229.     COVERAGE FACTOR=THE RATIO OF SWEEP WIDTH TO TRACK SPACING. FOR A SINGLE
  230.         CELL, COVERAGE FACTORS ARE ADDATIVE BUT POD'S ARE NOT
  231.         TOTAL POD FOR CELL=100*(1-EXP(-(COVF(1)+COVF(2)+...+COVF(N))))%
  232.     CELL/GRID PRIMARY NAME=THE LOCAL (ON BASE) NAME FOR A CELL/GRID.
  233.         EG. A,B,C...OR 1,2,3... OR AA,BB,CC.... ETC
  234.     CELL/GRID SECONDARY NAME=THE OFFICIAL GRID NAME. USUALLY USED IN 
  235.         REPORTING SEARCHED CELL/GRIDS TO ANOTHER SITE
  236.     NOT(POD)=THE PROBABILITY THAT A TARGET, WHICH IS PRESENT IN A GIVEN
  237.         GRID/CELL, WILL NOT BE FOUND
  238.     NOT(POT)=THE PROBABILITY THAT A TARGET WILL NOT BE PRESENT IN A GIVEN
  239.         GRID/CELL
  240.  
  241.  FORMULAS USED:                 POS( )=POT( )*POD( )     :NOT(POD( ))=EXP(-COVF)
  242.    TPOS=1-TPOF                :TPOF=SUM(POF( ))         :POT( )=POF( )/TPOF
  243.    COVF=SUM(COVF( ))        :POD( )=1-EXP(-COVF)      :COVF( )=-LN(1-POD( ))
  244.    1=POD( )+NOT(POD( ))     :1=POS( )+NOT(POS( ))     :1=POT( )+NOT(POT( ))
  245.    "CELL POF"=NOT(POT( ))+POT( )*(NOT(POD( )))=NOT(POT( ))+POF( )
  246.